Type checker's expected and inferred types (reformatted)
Isaac Dupree
ml at isaac.cedarswampstudios.org
Fri Oct 23 21:46:36 EDT 2009
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)
-Isaac
More information about the Glasgow-haskell-users
mailing list