hi haskellers, i have a basic question regarding StateT encapsulating IO and the modify function.
my scenario is similar to the following simple code snippet:
import Control.Monad.State type MyState = StateT Int IO test = evalStateT foo 0 foo = do modify $ (+) 1 get
i would like to be able to debug what's happening inside the modifier function. that's why i want to be able to use a modifier that's in the IO monad, like in the following, obviously defunct snippet:
test = evalStateT bar 0 bar = do modify $ myAdd 1 get myAdd :: Int -> Int -> IO Int myAdd x y = do putStr "in myAdd\n" return $ x + y
this fails because (myAdd :: Int -> Int -> IO Int) does not match the required modify argument type (Int -> Int -> Int) for MyState. Couldn't match expected type `Int' against inferred type `IO Int' In the second argument of `($)', namely `myAdd 1' In the expression: modify $ (myAdd 1) In a 'do' expression: modify $ (myAdd 1) is it possible to 'lift' StateT modify into the inner monad (IO in my case)? regards, peter. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe