После прочтения этой статьи я понимаю, что >=>
(Kleisli arrow) - это просто функция более высокого порядка для создания функций, возвращающих "монадические значения". Например:
val f: A => M[B] = ... val g: B => M[C] = ... val h: A => M[C] = f >=> g // compose f and g with Kleisli arrow
Он выглядит как простой состав "простых" функций (т.е. чистых функций, возвращающих простые значения):
val f: A => B = ... val g: B => C = ... val h = f andThen g; // compose f and g
Теперь я думаю, что этот "простой" состав andThen
соответствует некоторым законам
- Идентичность:
f andThen g == g
иg andThen f == g
для функции идентификации:f[A](a:A):A = a
- Ассоциативность:
(f1 andThen f2) andThen f3
==f1 andThen (f2 andThen f3)
И теперь мои вопросы:
- Соответствует ли
>=>
тем законам, где identityf(a:A) = M[a].unit(a)
? - Можем ли мы получить монадические законы из этих законов? Соответствуют ли эти законы и монадические законы?