答案 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}还包含有限列表。