import Data.Monoid
--Don't import Control.Monad.Writer
newtype Writer w a = Writer { runWriter :: (a, w) }
instance (Monoid w) => Monad (Writer w) where
return x = Writer (x, mempty)
(Writer (x,v)) >>= f = let (Writer (y, v')) = f x in Writer (y, v `mappend` v')
--Define tell
tell :: [String] -> Writer [String] Int
tell w = Writer (0, w) -- what'sa hell "0" for ???!!!
logNumber :: Int -> Writer [String] Int
logNumber x = Writer (x, ["Got number: " ++ show x])
multWithLog :: Writer [String] Int
multWithLog = do
a <- logNumber 3
b <- logNumber 5
tell ["Gonna multiply these two"]
return (a*b)
main = putStrLn . show $ runWriter multWithLog
[1] Ambiguity error of Writer, uneless I comment out "import Control.Monad.Writer", and
I'm not certain about my "tell". Where is the correct instantiation of "tell" included?