
Have I, like Monsier Jourdain, been running in the IO monad all my life, and didn't even know it? Sure, just try readFile "doesnotexist" within ghci :-) That's an IO action. on the other side ghci > (3+7) 10 is no IO action. So I think ghci has two default behaviours differing. Either its a monad, than use IO, else evaluate the result. In both cases show it. The ghc manual sould tell you all about this (too lazy to look it up)
But the ghci error message is another one: Try this: :set -XNoMonomorphismRestriction let increment x = return (x+1) let a = increment 1 the line let a = requires to find out about the type of m (Maybe any Monad such as Maybe, list etc) without XNoMonomorphismRestriction. With XNoMonomorphismRestriction you can tell ghc that you don't care yet about this and it should try to resolve m later. That's why ghci shows this: ghci> :t a a :: (Num t, Monad m) => m t The second way to get rid of the ghci error message is telling ghci which monad you want: increment 1 -- this works because it's run within IO print $ increment 1 -- won't, because ghc does'n know about the m type print $ fromJust $ increment 1 -- works again, because you tell ghc that m is Maybe here print $ (increment 1 :: [Int]) -- works as well, using list monad ... Sincerly Marc Weber