Клейсли - функтор, аппликатив или монада?
Этот вопрос вдохновлен отзывами на мой предыдущий Michael
Scalaz
предоставляет класс-оболочку Kleisli[M[_], A, B]
для функции A => M[B]
,
Kleisli[M[_], A, B]
является полугруппой, если M[_]
это полугруппа. Предположим, что M[_]
это функтор Это правильно, что Kleisli
тоже функтор? Что, если M[_]
это аппликатив или монада?
1 ответ
Полностью неприменимо Kleisli
ничего особенного - он имеет вид (* -> *) -> * -> * -> *
и я не знаю каких-либо значимых типов классов для такого рода.
Если у вас есть монада для конструктора типа F[_]
тогда Kleisli[F, ?, ?]
является Arrow
(который является типом класса для вещей рода * -> * -> *
).
Точно так же, если F[_]
имеет экземпляр функтора, то Kleisli[F, A, ?]
имеет экземпляр функтора для любого конкретного A
, На самом деле то же самое работает для аппликативных функторов и монад - есть экземпляр любого из них для F[_]
и у вас есть экземпляр для Kleisli[F, A, ?]
также.
Наконец, если у вас есть полугруппа (или моноид) для F[B]
, затем Kleisli[F, A, B]
является полугруппой (или моноидом) для любого A
,