Each monad implementation is different. In the case of the State monad your 'execState' call extracts a non-monadic value.
Of the basic monads I found the State monad the most confusing because of the complicated way in which it threads state through the computation. In the end, desugaring the do-notation and tracing through the code manually was the most helpful to me so I encourage you to do the same. After I did this a couple of times I got the gist of it.
I have attached a trace of your State monad functions 'modifiedImage' and 'drawPixels' which shows the intermediate stages explicitly. If you follow the steps you will see that there is no magic in how a non-monadic value is extracted from the State monad.
Let me know if I can be of more help.
-deech
When I am looking at a confusing monad like the State monad
Hi,
In the code here - http://hpaste.org/fastcgi/hpaste.fcgi/view?id=28393#a28393
If I look at the type of modifiedImage, its simply ByteString - but isn't it actually getting into and back out of the state monad? I am of the understanding that once you into a monad, you cant get out of it? Is this breaking the "monad" scheme?
--
Regards,
Kashyap
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe