这个问题的灵感来源于给我以前的question的反馈
Scalaz为函数A => M[B]提供了包装类Kleisli[M[_], A, B]。
如果Kleisli[M[_], A, B]是半群,则M[_]是半群。假设M[_]是函子。Kleisli也是函子,这是正确的吗?如果M[_]是一个应用程序或单一的呢?
发布于 2015-03-10 21:51:45
完全未应用的Kleisli不算什么--它有类(* -> *) -> * -> * -> *,而且我不知道有任何有意义的类型类。
但是,如果您有一个类型构造函数F[_]的monad,那么Kleisli[F, ?, ?]就是一个Arrow (它是类* -> * -> *的类型类)。
类似地,如果F[_]有一个函子实例,那么Kleisli[F, A, ?]对于任何特定的A都有一个函子实例。实际上,同样的情况也适用于应用程序函子和单子--有一个用于F[_]的它们的实例,也有一个用于Kleisli[F, A, ?]的实例。
最后,如果F[B]有半群(或单半群),那么Kleisli[F, A, B]是任何A的半群(或单半群)。
https://stackoverflow.com/questions/28973806
复制相似问题