流式Stream库的简化(无效)定义如下所示:
data Stream f = Step (f (Stream f))
| Return
我试图了解引入这个函子的动机f是什么。
一个典型的例子f是Of a,Of定义为
data Of a b = !a :> b
deriving Functor
当我读到这种有意义的定义时,f就像Of aan后跟more 可以从. 有了这种解释,定义中的. 但在这种情况下,一个更简单的版本应该是StreamOf a babf (Stream f)StreamOf 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。第一个是as 的流,第二个是流的流,第三个实现'erasure'。
我真的不明白。我可以实现所有这些事情,即简单的as 流、流的流和擦除,而无需f在Stream.
这个函子f做了什么不能做的事情?