|
[ ghc-Bugs-1231273 ] confusing error: msg#00071lang.haskell.glasgow.bugs
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> |
|---|---|---|
| Previous by Date: | [ ghc-Bugs-807249 ] Instance match failure on openTypeKind, SourceForge.net |
|---|---|
| Next by Date: | [ ghc-Bugs-1234458 ] Hardcoded path to perl.exe, SourceForge.net |
| Previous by Thread: | [ ghc-Bugs-1231273 ] confusing error, SourceForge.net |
| Next by Thread: | [ ghc-Bugs-1231273 ] confusing error, SourceForge.net |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |