21得票1回答
为什么Kleisli不是Monoid的实例?

如果您希望附加两个类型为(a -> m b)的函数,以便获得仅附加两个结果的相同类型的一个函数,那么您可以使用Kleisli:instance (Monad m, Monoid b) => Monoid (Kleisli m a b) where mempty = Klei...

20得票1回答
函数组合、Kleisli箭头和单子律

阅读了这篇文章后,我理解到>=>(Kleisli箭头)只是一个高阶函数,用于组合返回“单子值”的函数。例如: val f: A => M[B] = ... val g: B => M[C] = ... val h: A => M[C] = f >=> g // 用Kleisl...

19得票1回答
Kleisli、ReaderT和Reader在Scalaz中为什么相同,这只是巧合吗?

在 Scalaz 中: Kleisli[F, A, B] 是 A => F[B] 的封装器。 ReaderT[F, A, B] -- 读取器单子转换器 -- 只是 Kleisli[F, A, B] 的别名。 Reader[A, B] 单子是使用恒等单子 Id 特化的 ReaderT,...

9得票4回答
如何在单子中使用Kleisli箭头?

在Haskell的Control.Arrow文档中,它谈到了Kleisli箭头与单子的关系,但我不知道如何使用它。我有一个函数,我认为它符合箭头的要求,除了它涉及IO单子,所以我认为Kleisli箭头可能会有所帮助。 以下是返回目录中原始文件名和修改后文件名的一对对的函数。 import ...

9得票1回答
如何在Scala中使用>=>?

我正在尝试在Scala中使用>=>(Kleisli arrow)。据我了解,它是用于组合返回单子的函数的。现在我正在尝试以下操作: scala> val f = {i:Int => Some(i + 1)} f: Int => Some[Int] = <...

7得票1回答
Scalaz Kleisli的使用优势

在 scalaz 中,Kleisli[M[_], A, B] 是 A => M[B] 的一个包装器,允许组合此类函数。例如,如果 M[_] 是单子,我可以使用 >=> 将 Kleisli[M, A, B] 和 Kleisli[M, B, C] 组合在一起,以获取 Kleisl...