Bugs item #1231273, was opened at 2005-07-01 17:01 Message generated for change (Comment added) made by pimlott 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: Andrew Pimlott (pimlott) Date: 2005-07-14 16:45 Message: Logged In: YES user_id=498741 That's excellent. In fact, I look forward to making this mistake in the future. ---------------------------------------------------------------------- Comment By: Simon Peyton Jones (simonpj) Date: 2005-07-11 05: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 _______________________________________________ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs