module Main where import Data.Monoid import Mem f' :: Num a => Mem a String f' = Mem $ \s -> ("hi", s + 1) main :: IO () main = do let rmzero = runMem mempty 0 rmleft = runMem (f' <> mempty) 0 rmright = runMem (mempty <> f') 0 print $ (rmleft :: (String, Int)) print $ (rmright :: (String, Int)) print $ (rmzero :: (String, Int)) print $ rmleft == runMem f' 0 print $ rmright == runMem f' 0