作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里寻找一些词汇。有许多具有通用名称的形状。例如 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))
(->)
之外的唯一结构和
(>=>)
我已经看到了 Arrow 定义的一个实例。
最佳答案
这是 automaton arrow ,也称为 Mealy 机器。您的具体示例仅使用 (->)
作为基础箭头;另一个常见的选择是Kleisli m
对于一些 monad m (它只是将 a -> b
变成 a -> m b
;例如, data R a b = Q (a -> MyMonad (b, R a b))
)。
常用在functional reactive programming (特别是带箭头的 FRP — 参见,例如 netwire 和这两篇博文:1 ,2),并且适用于一般流处理(如迭代器)。
它在许多方面类似于协程,但它是一个更具体的概念。我链接的两篇博文称它们为协程,因此“协程”当然是一种常见的称呼方式,但准确的名称是自动机箭头。
关于haskell - 类型模式的名称 : R a b = Q (a -> (R a b, b)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487760/
我是一名优秀的程序员,十分优秀!