【问题标题】:How is Kleisli a monad Transformer?Kleisli 如何是一个单子变压器?
【发布时间】:2021-01-25 10:59:21
【问题描述】:

猫中 Monad Transformers 的一些定义。

EitherT[F[_], A, B] 是 F[Either[A, B]] 的轻量级包装器,它 可以很容易地将 Eithers 和 Fs 组合在一起。要使用 EitherT, 首先将 Either、F、A 和 B 的值转换为 EitherT,并且 然后使用组合器组合生成的 EitherT 值。

OptionT[F[_], A] 是 F[Option[A]] 上的轻包装。请讲 从技术上讲,它是 Option 的 monad 转换器,但你不需要 知道这对它有用意味着什么。 OptionT 可以更多 比直接使用 F[Option[A]] 更方便。

我理解这个概念,甚至看到一些有趣的讨论:Monad transformers down to earth by Gabriele Petronella

我了解 Reader Monad,以及 Kleisli 只是一个概括。

我不明白的是下面的声明,它说它是一个单子变换器。我们到底在堆叠什么?我没有看到 2 monad 被堆叠在这里....

Kleisli 可以看作是函数的 monad 转换器。记起 本质上,Kleisli[F, A, B] 只是一个函数 A => F[B], 与我们真正关心的价值一起工作, B,简单。 Kleisli 允许我们利用函数的效果和 让它们与任何其他 F[_] 的效果配合得很好。

有什么想法吗?

【问题讨论】:

    标签: scala functional-programming monads monad-transformers


    【解决方案1】:

    当我们考虑两个 monad 的组合时,会出现 Monad 转换器 EitherT[F[_], A, B]F[Either[A, B]] 的包装器):F(外部 monad)和 Either[A, ?](内部 monad)。

    当我们考虑两个 monad 的组合时,会出现 Monad 转换器 OptionT[F[_], A]F[Option[A]] 的包装器):F(外部 monad)和 Option(内部 monad)。

    当我们考虑两个单子的组合时,会出现单子转换器 Kleisli[F, A, B]A => F[B] 的包装器):A => ?(外单子)和F(内单子)。

    【讨论】:

    • 什么是单子“A=>?”在这种情况下
    • Monad 类型有名称,如您建议的 monad 和 option monad 或 function1 monad。让我知道被堆栈的两种单子的名称是什么?
    • @MaatDeamon Reader aka Function1(外部 monad)和任意 monad F(内部 monad)。
    • @DmytroMitin 这是我第一次在野外看到变形金刚,而且看起来也不像黑客。
    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多