Pet*_*lák 11 continuations haskell arrows monad-transformers category-theory
该ContT单子转换有一个有趣的属性:如果有一个* -> *类型,例如Set,已明确的单子操作,但不能有Monad实例由于一些限制(在这里Ord a),有可能把它包在ContT(ContT r Set)得到一个单子实例,并推迟约束外面,当我们像注入Set进ContT r Set.请参阅使用continuation monad 构造高效的monad实例Set.
箭头有类似的东西吗?一个箭头变换器,它允许将"几乎箭头"包装进去,得到一个有效的Arrow实例,并将有问题的约束推迟到我们向它注入"几乎箭头"的部分?
例如,如果我们有一个类型AlmostArrow :: * -> * -> *,我们有通常的Arrow操作,但有约束,如
arr' :: (Ord a, Ord b) => (a -> b) -> AlmostArrow a b
(>>>') :: (Ord a, Ord b, Ord c) => AlmostArrow a b -> AlmostArrow b c -> AlmostArrow a c
Run Code Online (Sandbox Code Playgroud)
作为奖励,如果是的话,是否有一些漂亮的,通用的类别理论方法如何导出ContT这样的箭头变换器?