He estado tratando de código hasta el Eilenberg-Moore categoría para una mónada en Haskell.
Como yo lo entiendo, dada una categoría $C$ y una mónada $(T,\eta,\mu)$ $C$ construimos la Eilenberg-Moore categoría $C^T$ como la categoría cuyos objetos son álgebras de en $a$, es decir, los pares que consiste en un objeto de $a$ $C$ y un mapa de la $h:Ta\to a$ la satisfacción de algunas propiedades, y cuyos morfismos son álgebra homomorphisms.
El functor $G:C^T \to C$ es olvidadizo functor que actúa como
$$G(a,h:Ta \to a) = a$$
$$G(f:a\to b,\, g:(Ta\to a)\to(Tb\to b)) = f$$
El functor $F:C\to C^T$ actúa sobre los objetos como
$$Fa = (Ta,\,\mu)$$
pero no entiendo lo que hace a morfismos. Tengo
$$Ff = (Tf,\, \_ )$$
pero no entiendo lo que pasa en el _.
Necesito crear algo de tipo $(T(Ta) \to Ta)\to (T(Tb)\to Tb)$ de
$$\mu:T(Ta)\to Ta$$
$$\eta:a\to Ta$$
$$f:a\to b$$
$$T:(a\to b)\to (Ta\to Tb)$$
Pero no veo cómo hacerlo. Supongo que una opción sería la función que tiene cada álgebra $h$$\mu$, es decir,
$$Ff = (Tf, \lambda h.\mu)$$
pero ni siquiera estoy convencido de que es un álgebra de homomorphism. Me estoy perdiendo algo?