Haskell book (author Anton Kholomiov)中流的实现(第70页)

data Stream a = a :& Stream a


我了解:&的含义,但找不到其定义

最佳答案

那就是定义。 Stream类型定义一个名为:&的单个中缀数据构造函数。相比于

data Stream a = StreamCons a (Stream a)


它将定义相同的类型,但是创建StreamCons而不是:&作为数据构造函数。

与常规中缀运算符不同,中缀数据构造函数必须以冒号开头。



使用StreamCons构造函数,您的constStream函数看起来像

constStream :: a -> Stream a
-- constStream x = x :& (constStream x)
constStream x = StreamCons x (constStream x)


返回无限列表的相同函数看起来像

constList :: a -> [a]
constList x = x : (constList x)


:&的用途与:相同,只是用于Stream a而不是[a]。实际上,Stream[]之间的唯一区别是Stream a仅包含表示a的无限序列的值,而[a]也包含有限列表。

10-06 07:16