Клейсли - функтор, аппликатив или монада?

Этот вопрос вдохновлен отзывами на мой предыдущий 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,

Другие вопросы по тегам