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 On Fri, Jul 30, 2010 at 1:23 AM, C K Kashyap <ckkashyap@gmail.com> wrote:
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