Name: Anonymous 2008-09-23 13:47
So can anybody tell me in a way one can understand it what a fucking monad does?
data World = World ...getChar :: World -> (Char, World)putChar :: World -> ((), World)cat :: World -> ((), World)
cat s0 = let (x, s1) = getChar s0
in if x == EOF
then ((), s1)
else let (y, s2) = putChar s1
in cat s2data IO a = IO (World -> (a, World))getChar :: IO Char
putChar :: IO ()instance Monad (IO a) where
IO m >>= f = IO (\s0 -> let (x, s1) = m s0
IO m' = f x
in m' s1)
IO m >> IO m' = IO (\s0 -> let (x, s1) = m s0
in m' s1)
return x = IO (\s0 -> (x, s0))cat :: IO ()
cat = getChar >>= (\x -> if x == EOF
then return ()
else putChar x >> cat)cat :: IO ()
cat = do x <- getChar
if x == EOF
then return ()
else do putChar
cat