[Haskell-beginners] help with IO guards

Julian Birch julian.birch at gmail.com
Thu Jan 15 21:12:11 UTC 2015

Going back to an earlier question: a monad is a bit like a roach motel. You
can check in but you can't leave. (This isn't true of every Monad, but the
point is there's no guarantees.) In particular, you can't go from IO String
to String _at all_. But you can, through Functor, pass it to a function
that takes a plain String. And through Monad, you can turn IO (IO String)
back to IO String.

Hope this helps.

On Thursday, January 15, 2015, Marcin Mrotek <marcin.jan.mrotek at gmail.com>

> Hello,
> A list ([]) is also a monad, and a String is defined as a list of
> characters ([Char]). So in your example, it's as if you were trying to
> use (>>=) operator on two different monads ([] and IO), which is
> impossible. To make a pure value a monadic value, you need to use
> return:
> g = readLn >>= (\a -> return (f a))
> which is equivalent to composing f with return:
> g = readLn >>= return.f
> Regards,
> Marcin
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org <javascript:;>
> http://www.haskell.org/mailman/listinfo/beginners

Sent from an iPhone, please excuse brevity and typos.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20150115/af1423e4/attachment.html>

More information about the Beginners mailing list