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