Noté que hay una relación dual entre Writer m
y Either e
mónadas. Si m es un monoide, entonces¿Las mónadas Writer my E son categóricamente duales?
unit ::() -> m
join :: (m,m) -> m
se puede utilizar para formar una mónada:
return is composition: a -> ((),a) -> (m,a)
join is composition: (m,(m,a)) -> ((m,m),a) -> (m,a)
El dual de() es nula (tipo vacío), el doble de producto es coproducto. Cada tipo e puede tener una estructura "comonoide":
unit :: Void -> e
join :: Either e e -> e
de la manera obvia. Ahora,
return is composition: a -> Either Void a -> Either e a
join is composition: Either e (Either e a) -> Either (Either e e) a -> Either e a
y esta es la Either e
mónada. Las flechas siguen exactamente el mismo patrón.
Pregunta: ¿Es posible escribir un solo código genérico que será capaz de llevar a cabo tanto como Either e
y como Writer m
dependiendo del monoide dado?
Gracias! Es esta construcción, publiqué el código. – sdcvvc