我们具有如下定义的StreamTransformer
类型:
newtype StreamTransformer input output = StreamTransformer
{ runStreamTransformer :: input -> (output, StreamTransformer input output)
}
以下看起来像扫描/折叠的功能非常有用
scan :: (a -> b -> b) -> b -> StreamTransformer a b
scan op init = StreamTransformer $ \i -> (init, scan op (i `op` init))
此scan
是否有名称?它可以表达/理解为某种形式的变形/变形吗?
在库机器中,StreamTransformer
类型称为Mealy machine。值得注意的是,该概念起源于有限状态机的上下文,而这种有限性的概念在这种类型中就消失了。
data Mealy i o
= Mealy (i -> (o, Mealy i o))