Advertisement
Wewbull

[Book] [Ch15] Exercise 8

Jun 17th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Reader where
  2.  
  3. import Data.Monoid
  4.  
  5. newtype Mem s a =
  6.   Mem {
  7.     runMem :: s -> (a,s)
  8.   }
  9.  
  10. instance Monoid a => Monoid (Mem s a) where
  11.   mempty = Mem $ \s -> (mempty, s)
  12.   mappend m1 m2 =
  13.     Mem $ \s -> let
  14.       (a1, s1) = runMem m1 s
  15.       (a2, s2) = runMem m2 s1
  16.       in (a1 <> a2, s2)
  17.  
  18. fc :: Mem Integer String
  19. fc = Mem $ \s -> ("hi", s + 1)
  20.  
  21. main :: IO ()
  22. main = do
  23.   print $ runMem (fc <> mempty) 0                -- ("hi",1)
  24.   print $ runMem (mempty <> fc) 0                -- ("hi",1)
  25.   print (runMem mempty 0 :: (String, Int))       -- ("",0)
  26.   print $ runMem (fc <> mempty) 0 == runMem fc 0 -- True
  27.   print $ runMem (mempty <> fc) 0 == runMem fc 0 -- True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement