gpt4 book ai didi

scala - 函数组合、Kleisli 箭头和一元定律

转载 作者:行者123 更新时间:2023-12-03 13:35:33 25 4
gpt4 key购买 nike

看完这篇article我了解 >=> (Kleisli 箭头)只是组合函数的高阶函数,它返回“一元值”。例如:

val f: A => M[B] = ...
val g: B => M[C] = ...

val h: A => M[C] = f >=> g//用 Kleisli 箭头组合 f 和 g

它看起来像是“简单”函数的简单组合(即返回简单值的纯函数):

val f: A => B = ...
val g: B => C = ...

val h = f 然后 g;//合成 f 和 g


现在我猜这个“简单”的作文andThen符合某些法律

  • 身份:f andThen g == gg andThen f == g身份功能:f[A](a:A):A = a
  • 关联性:(f1 andThen f2) andThen f3 == f1 andThen (f2 andThen f3)

  • 现在我的问题:
  • 是否 >=>符合那些法律,其中身份是​​ f(a:A) = M[a].unit(a) ?
  • 我们能从这些法则中推导出一元法则吗?这些定律和一元定律等效吗?
  • 最佳答案

    你在这里看到的是这个结构的直接结果是 category .

  • 是的,他们确实符合。它们的一致性确实是它们被称为 Kleisli 的原因,因为 Kleisli 箭头加类型形成 Kleisli category单子(monad)的(每个单子(monad)都产生)。这也是为什么unit是这样称呼的:它是由克莱斯利箭组成的单位。
  • 是的,它们可以派生。使用转换 (f <=< g) x = f =<< (g x) (其中 <=<andThen ,而 =<< 可能类似于 Scala 中的 flip(bind))。推导的确切步骤可以找到here .
  • 关于scala - 函数组合、Kleisli 箭头和一元定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499849/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com