类型模式名称:R ab = Q(a - >(R ab,b))

Joh*_*ler 15 haskell types terminology data-structures

我在这里寻找一些词汇.有许多形状具有通用名称.例如,L a = Empty | Cons a L通常称为"列表",而T a = Leaf a | Node (T a) (T a)"二叉树" St s a :: St (s->(a,s))则是状态Monad的形式.

我想知道这样的形状是否有一个名字:

data  R a b = Q (a -> (R a b,b))
Run Code Online (Sandbox Code Playgroud)

我在Arrow框架和State Machine实现中看到了这种模式.递归函数使它感觉有点像State Monad或Cont Monad.这也是除了唯一的结构(->)(>=>)为我所见过定义箭头的实例.

这个数据结构有一个共同的名称吗?

ehi*_*ird 23

这是一个自动机箭头,也称为Mealy机器.您的具体示例仅用(->)作底层箭头; 另一个常见的选择是Kleisli m一些monad m(例如,它变成a -> b了).a -> m bdata R a b = Q (a -> MyMonad (b, R a b))

它通常在使用官能的反应性的编程(即,arrowised FRP -参见,例如netwire并且这两个博客文章:1,2),并且具有应用到一般的流处理(如iteratees).

它在很多方面类似于协程,但它是一个更具体的概念.我链接的两篇博客文章称它们为协同程序,因此"coroutine"肯定是引用它的常用方法,但精确的名称是自动机箭头.


dfl*_*str 8

我将该数据结构称为Coroutine.

它表示可以与其他计算并行控制的计算,并且可以逐步评估.虽然你提供的接口不是用于Haskell中的Coroutines类的确切接口(更通用的Coroutine也是monad不可知的,这意味着包装函数返回a m (R a b, b),而协同程序不必消耗输入,而你在这里总是要用a a)来计算,它就足够了.

数据结构还表示所谓的Comonads的子集.