2

这个问题的灵感来自对我上一个问题的反馈

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

Kleisli[M[_], A, B]是一个半群,如果M[_]是一个半群。假设这M[_]是一个函子。Kleisli也是一个仿函数是否正确?如果M[_]是 applicative 或 monad 怎么办?

4

1 回答 1

7

完全未应用Kleisli的不是什么东西——它有 kind (* -> *) -> * -> * -> *,我不知道有任何有意义的类型类用于那种。

但是,如果您有一个类型构造函数的 monad F[_],那么它Kleisli[F, ?, ?]就是一个Arrow(它是一种类型的事物的类型类* -> * -> *)。

类似地,如果F[_]有一个仿函数实例,那么Kleisli[F, A, ?]对于任何特定的. 都有一个仿函数实例A。事实上,同样的事情也适用于应用函子和单子——拥有其中任何一个的实例,F[_]你也有一个实例Kleisli[F, A, ?]

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

于 2015-03-10T21:51:45.247 回答