¿Cómo puedo entender "(.). (.) ”?
Creo que entiendofmap . fmap
para los Functors, pero en las funciones me duele la cabeza desde hace meses.
He visto que solo puedes aplicar la definición de(.)
a(.) . (.)
, pero me he olvidado de cómo hacer eso.
Cuando lo intento yo siempre sale mal:
(.) f g = \x -> f (g x)
(.) (.) (.) = \x -> (.) ((.) x)
\x f -> (.) ((.) x) f
\x f y -> (((.)(f y)) x)
\x f y g-> (((.)(f y) g) x)
\x f y g-> ((f (g y)) x)
\x f y g-> ((f (g y)) x):: t2 -> (t1 -> t2 -> t) -> t3 -> (t3 -> t1) -> t
Si "solo aplicar la definición" es la única forma de hacerlo, ¿cómo se le ocurrió a alguien?(.) . (.)
?
Debe haber algún entendimiento más profundo o intuición que me falta.