On Fri, Oct 23, 2009 at 9:46 PM, Isaac Dupree <m...@isaac.cedarswampstudios.org> wrote: > C Rodrigues wrote: >> >> fun1 produces the error message: >> Couldn't match expected type `Maybe a' against inferred type `IO ()' >> In the first argument of `(>>=)', namely `bar' >> >> >> fun2 produces the error message: >> Couldn't match expected type `IO ()' against inferred type `Maybe ()' >> In a stmt of a 'do' expression: bar >> >> >> It's confusing because 'bar' is inferred to have type Maybe (), even >> though it's explicitly declared to be an IO (). > > Which message do you prefer? I couldn't tell which it was. > > For myself, I never understood the difference between "expected" and > "inferred": it works better for me to just think "there were at least two > different ways that determined the 'type' of this expression, and the > results contradicted each other, and here are two of those results. Now, > dear user, go and look at your code to intuit *what* those ways of > determining the type might have been" (or sometimes it's easier just to look > for mistakes, ignoring the particular details of the error)
The expected type is what the context wants (it's *ex*ternal). The inferred type is what the expression itself has (it's *in*ternal). So inferring the type Maybe () for bar seems wrong. I'm guessing it's a bug in the way do-expressions are handled. Note that this doesn't happen if the bar is last. Prelude> :t let fooThen m = foo >> m in fooThen (do undefined; bar) <interactive>:1:51: Couldn't match expected type `Maybe b' against inferred type `IO ()' In the expression: bar In the first argument of `fooThen', namely `(do undefined bar)' In the expression: fooThen (do undefined bar) Prelude> :t do foo; bar <interactive>:1:8: Couldn't match expected type `Maybe b' against inferred type `IO ()' In the expression: bar In the expression: do foo bar Prelude> :t do foo; bar; foo <interactive>:1:8: Couldn't match expected type `IO ()' against inferred type `Maybe ()' In a stmt of a 'do' expression: bar In the expression: do foo bar foo -- Dave Menendez <d...@zednenem.com> <http://www.eyrie.org/~zednenem/> _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users