logo       

[ ghc-Bugs-1231273 ] confusing error: msg#00071

lang.haskell.glasgow.bugs

Subject: [ ghc-Bugs-1231273 ] confusing error

Bugs item #1231273, was opened at 2005-07-01 22:01
Message generated for change (Comment added) made by simonpj
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1231273&group_id=8032

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Compiler (Type checker)
Group: None
>Status: Closed
>Resolution: Fixed
Priority: 5
Submitted By: Andrew Pimlott (pimlott)
Assigned to: Simon Peyton Jones (simonpj)
Summary: confusing error

Initial Comment:
I got a perplexing error message. Here is a concise
example:

t = ((\Just x -> x) :: Maybe a -> a) (Just 1)

Try.hs:1:6:
Couldn't match the rigid variable `a' against
`t -> t1'
`a' is bound by the polymorphic type `forall
a. Maybe a -> a' at Try.hs:1:5-34
Expected type: a
Inferred type: t -> t1
In the expression: (\ Just x -> x) :: Maybe a -> a
In the definition of `t': t = ((\ Just x -> x)
:: Maybe a -> a) (Just 1)
Failed, modules loaded: none.

It seems to be telling me that the whole expression "(Just x -> x) ::
Maybe a -> a" was expected to have type a, in
contradiction to the explicit
type annotation it prints out! In the context of a
larger program, this
threw me for a loop. I would have expected

Expected type: Maybe -> a
Inferred type: Maybe -> t -> t1

Even better, if I change the code, I get a helpful
diagnostic:

t = (\Just x -> x) (Just 1)

Try.hs:1:6:
Constructor `Just' should have 1 argument, but
has been given 0
When checking the pattern: Just
In a lambda abstraction: \ Just x -> x
In the definition of `t': t = (\ Just x -> x)
(Just 1)
Failed, modules loaded: none.

Could I get that error in the first example? You could
probably go even further: "(did you forget parentheses
around the pattern?)".

----------------------------------------------------------------------

>Comment By: Simon Peyton Jones (simonpj)
Date: 2005-07-11 10:52

Message:
Logged In: YES
user_id=50165

Good bug report. I've improved the message a lot:

tcfail140.hs:16:6:
The lambda expression `\ Just x -> ...' has two argumentss,
but its type `Maybe a -> a' has only one
In the expression: (\ Just x -> x) :: Maybe a -> a
In the definition of `t': t = ((\ Just x -> x) :: Maybe a -> a)
(Just 1)

test is tcfail140

Simon



----------------------------------------------------------------------

You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1231273&group_id=8032


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise