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]
也包含有限列表。