在Haskell中带有&符号的冒号的含义(:&)

时间:2016-10-25 15:31:36

标签: haskell

Haskell book (author Anton Kholomiov)(第70页)

实施流
data Stream a = a :& Stream a

我明白要做什么:&,但找不到它的防御

1 个答案:

答案 0 :(得分:9)

定义。 null类型定义了一个名为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 s的无限序列的值,而{{1}还包含有限列表。