Esto es una combinación de State
y Writer
. He revisado las leyes de la mónada.¿Cuál es un buen nombre para esta mónada tipo estado
newtype M s a = M { runM :: s -> (s,a) }
instance (Monoid s) => Monad (M s) where
return = M . const . (mempty,)
m >>= f = M $ \s ->
let (s' ,x) = runM m s
(s'',y) = runM (f x) (s `mappend` s')
in (s' `mappend` s'', y)
StateWriter
seem kinda lame.
'conat'? Hubiera esperado 'devolver a = M. flip (,) a' o algo así. – ephemient
Sry, typo, 'const'. – luqui
¿Por qué '>> =' no produce '(s \' mappend \ 's '\' mappend \ 's' ', y)'? Estoy un poco confundido sobre el monoide devuelto. – rampion