После прочтения этой статьи я понимаю, что >=> (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)? - Можем ли мы получить монадические законы из этих законов? Соответствуют ли эти законы и монадические законы?