Kleisli是一个算子,应用程序还是monad?

Mic*_*ael 2 scala scalaz kleisli

这个问题的灵感来自我之前提出的问题的反馈

ScalazKleisli[M[_], A, B]函数提供包装类A => M[B].

Kleisli[M[_], A, B]如果M[_]是半群,则是半群.假设这M[_]是一个仿函数.这Kleisli也是一个仿函数是正确的吗?如果M[_]是申请人或单身人士怎么办?

Tra*_*own 7

完全Kleisli没有应用的东西并不多 - 它很有用(* -> *) -> * -> * -> *,而且我不知道那种有意义的类型类.

但是,如果你有一个类型构造函数的monad F[_],那么它Kleisli[F, ?, ?]是一个Arrow(它是类型的类型类* -> * -> *).

同样,如果F[_]有一个仿函数实例,那么Kleisli[F, A, ?]就有一个特定的仿函数实例A.事实上同样的事情适用于applicative functors和monad - 有一个实例,F[_]并且你也有一个实例Kleisli[F, A, ?].

最后,如果你有一个半群(或幺半群)F[B],那么Kleisli[F, A, B]对于任何一个半群(或幺半群)A.