流式Stream
库的简化(无效)定义如下所示:
data Stream f = Step (f (Stream f))
| Return
我试图了解引入这个函子的动机f
是什么。
一个典型的例子f
是Of a
,Of
定义为
data Of a b = !a :> b
deriving Functor
当我读到这种有意义的定义时,f
就像Of a
an后跟more 可以从. 有了这种解释,定义中的. 但在这种情况下,一个更简单的版本应该是Stream
Of a b
a
b
f (Stream f)
Stream
Of a (Stream (Of a))
data Stream a = Step a (Stream a)
| Return
我很难理解为什么要使用这个函子的泛化f
。作者在介绍中说Stream
...可用于流式传输以任何函子为特征的连续不同步骤
f
和
一般类型
Stream f m r
表示一连串的步骤......其形状由“函子”参数确定f
。
但在Streaming.Prelude中,我能找到的唯一函子是Or a
,Stream (Of a) m
和Identity
。第一个是a
s 的流,第二个是流的流,第三个实现'erasure'。
我真的不明白。我可以实现所有这些事情,即简单的a
s 流、流的流和擦除,而无需f
在Stream
.
这个函子f
做了什么不能做的事情?