Haskell 中的流数据类型实现

Ali*_* K. 3 haskell stream algebraic-data-types custom-data-type

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

data Stream a = a :> Stream a
Run Code Online (Sandbox Code Playgroud)

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

streamToList :: Stream a -> [a]
Run Code Online (Sandbox Code Playgroud)

它必须采用“”对象Stream并返回一个无限列表。但我不知道如何获取这个对象的元素。我怎样才能获取这个流的元素?

另外,我想问:这种数据类型的对象如何初始化?

Wil*_*ess 5

您已将数据类型定义为

data Stream a = a :> Stream a
Run Code Online (Sandbox Code Playgroud)

这可以作为一个模式,一个如何使用它的模板。“使用”意味着创建访问。换句话说,互动

可以使用定义中左侧的模式来访问此类型的值,=

foo (a :> restOfAs) = a : foo restOfAs
Run Code Online (Sandbox Code Playgroud)

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

可以使用它作为定义右侧的代码模式来创建此类型的值,例如=

bar i = i :> bar (i+1)
Run Code Online (Sandbox Code Playgroud)

或者

baz [x]    = x :> baz [x]
baz (x:xs) = x :> baz xs
baz []     = error "can't be empty"
Run Code Online (Sandbox Code Playgroud)

或者

quux x = xs  where  
         xs = x :> xs
Run Code Online (Sandbox Code Playgroud)

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