
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
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@haskell.org javascript:; http://www.haskell.org/mailman/listinfo/beginners
-- Sent from an iPhone, please excuse brevity and typos.