Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Reader where
- import Data.Monoid
- newtype Mem s a =
- Mem {
- runMem :: s -> (a,s)
- }
- instance Monoid a => Monoid (Mem s a) where
- mempty = Mem $ \s -> (mempty, s)
- mappend m1 m2 =
- Mem $ \s -> let
- (a1, s1) = runMem m1 s
- (a2, s2) = runMem m2 s1
- in (a1 <> a2, s2)
- fc :: Mem Integer String
- fc = Mem $ \s -> ("hi", s + 1)
- main :: IO ()
- main = do
- print $ runMem (fc <> mempty) 0 -- ("hi",1)
- print $ runMem (mempty <> fc) 0 -- ("hi",1)
- print (runMem mempty 0 :: (String, Int)) -- ("",0)
- print $ runMem (fc <> mempty) 0 == runMem fc 0 -- True
- print $ runMem (mempty <> fc) 0 == runMem fc 0 -- True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement