mWriter.hs
unknown
plain_text
3 years ago
907 B
14
Indexable
--- Monada Writer
newtype WriterS a = Writer { runWriter :: (a, String) }
instance Monad WriterS where
return va = Writer (va, "")
ma >>= k = let (va, log1) = runWriter ma
(vb, log2) = runWriter (k va)
in Writer (vb, log1 ++ log2)
instance Applicative WriterS where
pure = return
mf <*> ma = do
f <- mf
a <- ma
return (f a)
instance Functor WriterS where
fmap f ma = pure f <*> ma
tell :: String -> WriterS ()
tell log = Writer ((), log)
logIncrement :: Int -> WriterS Int
logIncrement x = do
tell ("Incrementing " ++ show x ++ "\n")
return (x + 1)
logIncrementN :: Int -> Int -> WriterS Int
logIncrementN x n = do
tell ("increment:" ++ show x ++ "\n")
if n == 1
then return (x + 1)
else logIncrementN (x + 1) (n - 1)
Editor is loading...