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

时间:2015-03-10 20:48:46

标签: scala scalaz kleisli

这个问题的灵感来自我之前question

的反馈

Scalaz为函数Kleisli[M[_], A, B]提供了包装类A => M[B]

如果Kleisli[M[_], A, B]是半群,则

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

1 个答案:

答案 0 :(得分:7)

完全未应用的Kleisli并不重要 - 它有类(* -> *) -> * -> * -> *,而且我不知道任何有意义的类型类。

如果您有类型构造函数F[_]的monad,那么Kleisli[F, ?, ?]Arrow(类型类* -> * -> *的类型类)。

同样,如果F[_]有一个仿函数实例,那么Kleisli[F, A, ?]就会为任何特定的A提供一个仿函数实例。实际上,同样的东西适用于applicative functors和monad - 有F[_]的任何一个实例,你也有Kleisli[F, A, ?]的实例。

最后,如果你有F[B]的半群(或幺半群),那么Kleisli[F, A, B]是任何A的半群(或幺半群)。

相关问题