Haskell 中的流数据类型实现

Stream data type implementation in Haskell

我在大学有 Haskell 编程课程。而且我必须实现我自己的数据类型“Stream”及其一些功能:

data Stream a = a :> Stream a

我在实现功能“streamToList”时遇到问题:

streamToList :: Stream a -> [a]

它必须取一个“Stream”的对象和return一个无限列表。但是我不知道如何获取这个对象的元素。如何获取此流的元素?

另外我想问一下:这个数据类型的对象初始化方法是什么?

It must takes an object of "Stream" and returns an infinite list. But I don't know how to take elements of this object.

通过模式匹配,您可以“解压”包装在数据构造函数中的数据,例如:

streamToList :: Stream a -> [a]
streamToList <b>(x :> xs)</b> = …

此处 x 是流的第一项,xsStream 项。

我将执行子句的主体( 部分)留作练习。您将需要递归以“遍历”流的其余部分。

您已将数据类型定义为

data Stream a = a :> Stream a

这是一种模式,一种如何使用的模板。 “已使用”表示 已创建已访问。换句话说,互动

这种类型的值可以访问,定义中 = 左侧的模式,

foo (a :> restOfAs) = a : foo restOfAs

(这​​个函数的类型是什么?)

可以创建此类型的值,将其用作定义中=右侧的代码模式,例如

bar i = i :> bar (i+1)

baz [x]    = x :> baz [x]
baz (x:xs) = x :> baz xs
baz []     = error "can't be empty"

quux x = xs  where  
         xs = x :> xs

(这​​些函数的类型是什么?)