{-# LANGUAGE ScopedTypeVariables #-}
import Prelude hiding (log)
import Control.Monad.Trans.Loop
import Control.Exception
import Control.Monad.Reader
import Control.Monad.Writer
test1 :: IO ()
test1 =
foreach [1..4] $ \(i :: Int) -> do
let log msg = liftIO $ putStrLn $ "test1: " ++ show i ++ ": " ++ msg
logMaskingState = do
b <- lift getMaskingState
log $ "getMaskingState: " ++ show b
logMaskingState
liftLocalLoopT mask_ $ do
logMaskingState
when (i == 3) $ do
log "continue"
continue
logMaskingState
-- This test is interesting because we're using mtl's 'local', which in this
-- context walks up the WriterT too.
test2 :: IO ()
test2 =
mapM_ putStrLn $
flip runReader (0 :: Int) $
execWriterT $
foreach [1..4] $ \(i :: Int) -> do
let log msg = lift $ tell ["test2: " ++ show i ++ ": " ++ msg]
logAsk = do
n <- lift ask
log $ "ask: " ++ show n
logAsk
liftLocalLoopT (local (+1)) $ do
logAsk
when (i == 3) $ do
log "continue"
continue
logAsk