scala - programacion - Composición de funciones, flechas de Kleisli y leyes monádicas.
monadas wikipedia (1)
Lo que tienes aquí es la consecuencia inmediata de que esta construcción sea una category .
- Sí, se conforman. Y el hecho de que se conformen es la razón por la que se llaman Kleisli , porque las flechas y los tipos de Kleisli forman la categoría de la mónada Kleisli (a la que da lugar cada mónada). También es por eso que la
unit
se llama así: es la unidad bajo la composición de las flechas de Kleisli. - Sí, se pueden derivar. Use la transformación
(f <=< g) x = f =<< (gx)
(donde<=<
esandThen
, y=<<
es probablemente algo así comoflip(bind)
en Scala). Los pasos exactos de la derivación se pueden encontrar here .
Después de leer este article , entiendo que >=>
( flecha Kleisli ) es solo una función de orden superior para componer funciones, que devuelve "valores monádicos". Por ejemplo:
val f: A => M[B] = ... val g: B => M[C] = ... val h: A => M[C] = f >=> g // compose f and g with Kleisli arrow
Parece una composición simple de funciones "simples" (es decir, funciones puras que devuelven valores simples):
val f: A => B = ... val g: B => C = ... val h = f andThen g; // compose f and g
Ahora supongo que esta composición "simple" y andThen
ajusta a ciertas leyes
- Identidad :
f andThen g == g
yf andThen g == g
yg andThen f == g
para la función de identidad :f[A](a:A):A = a
- Asociatividad :
(f1 andThen f2) andThen f3
==f1 andThen (f2 andThen f3)
Y ahora mis preguntas:
- ¿Se ajusta
>=>
a esas leyes, donde la identidad esf(a:A) = M[a].unit(a)
? - ¿Podemos derivar las leyes monádicas de esas leyes? ¿Son esas leyes y las leyes monádicas equivalentes?