packages feed

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