
Hello,
it's a bit hidden in Haskell, but a monad instance consists of three
functions:
fmap :: (a -> b) -> (m a -> m b)
return :: a -> m a
join :: m (m a) -> m a
Nothing more is needed to define a monad. In Haskell, a monad is
expressed by 'return' and (>>=) instead, but this is equivalent.
The types of these functions tell you what you can do with the monad.
You can put values into it and you can turn a doubly wrapped monadic
value into a singly wrapped monadic value (usually by dropping
information).
Unless there is a function, which has deeper comprehension of a monadic
value than these two functions, like 'runState' or 'head', you can never
get values out of it. For the IO monad no such function can exist.
This is intentional.
Greets,
Ertugrul
C K Kashyap
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?
-- nightmare = unsafePerformIO (getWrongWife >>= sex) http://ertes.de/