Questo è qualcosa di una combinazione di State
e Writer
. Ho controllato le leggi della monade.Qual è un buon nome per questa monade simile allo stato
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
sembra un po 'zoppo.
'conat'? Mi sarei aspettato 'return a = M. flip (,) a' o qualcosa di simile. – ephemient
Sry, typo, 'const'. – luqui
Perché non '>> =' yield '(s \' mappend \ 's '\' mappend \ 's' ', y)'? Sono solo un po 'confuso riguardo al ritorno dei monoidi. – rampion