Tainted-0.1.0.2: examples/TransExample.hs
module TaintTransformerExample where
import Data.Tainted
import Control.Monad.Trans.Tainted
import Control.Monad.State
type TaintedState a b = TaintedT (State a) b
doStuff :: Int -> (TaintedState Int Int) -> Tainted Int
doStuff n f = evalState (runTainted f) n
f :: TaintedState Int Int
f = do
x <- lift get
return $ x + 6
g :: TaintedState Int Int
g = do
x <- lift get
y <- hoistTainted $ Dirty 6
return $ x + y
h :: TaintedState Int Int
h = do
x <- lift get
lift $ put (x + 1)
y <- hoistTainted $ Dirty 7
z <- lift get
return $ x + y + z
ex1 = doStuff 5 f
ex2 = doStuff 5 g
ex3 = doStuff 5 h