haskell - 函数和克莱斯利箭头的应用

标签 haskell typeclass kleisli

(.)(<=<)非常相似:

(.)   ::            (b ->   c) -> (a ->   b) -> (a ->   c)
(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c)

并且可以作为 Category 中的方法使用类型类( (->)Kleisli 实例):

(<<<) :: (Category f) => f b c -> f a b -> f a c

($)(=<<)也很相似:

($)   ::            (a ->   b) ->   a ->   b
(=<<) :: Monad m => (a -> m b) -> m a -> m b

是否有一个类型类可以抽象这些应用程序函数?

最佳答案

正如丹尼尔的评论所说,(=<<)已经包含($)Kleisli 已经有一个 newtype (类似于 a -> m b newtype for Category for a )叫 Identity ,其中有 Monad实例使得

f $ x

对应

Identity . f =<< Identity x

虽然(.)中有重复使用的子组件和(<=<) (即前者的 a -> b 和后者的 a -> m b)可以抽象为类型构造函数 a :: * -> * -> * 的类型类。 (结果是 Category ), ($) 中最大的此类子组件和(=<<)只是 a在前者和 m a在后者中。

关于haskell - 函数和克莱斯利箭头的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065480/

相关文章:

haskell - 跟踪约束的技术

java - Frege 中与 Java 的互操作性,尤其是在 IO Monad 中

Scalaz Kleisli 使用优势

haskell - 在 Haskell 中类型转换是如何工作的?

haskell - 操作类型构造函数的参数顺序

scala - 类型类接口(interface)的DataSet/DataStream

haskell - 为什么 Haskell 缺少 "obvious"类型类

haskell - 对于简单的代码,类型约束变得巨大且不可读

haskell - 如何在单子(monad)中使用 Kleisli 箭头?

scala - 组合返回选项的函数