Ticket #919 (closed bug: fixed)
Cryptic type error message (should be syntax error)
| Reported by: | josef.svenningsson@… | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | 6.8.1 |
| Component: | Compiler (Type checker) | Version: | 6.5 |
| Keywords: | Cc: | ||
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | Difficulty: | Easy (less than 1 hour) | |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
It seems ghc allows a syntax for types which if beyond Haskell98 even without -fglasgow-exts. Consider the following program:
destroy :: (forall a. (a -> Maybe (b,a)) -> a -> c) -> [b] -> c
destroy g xs = g listpsi xs
where listpsi :: [a] -> Maybe (a,[a])
listpsi [] = Nothing
listpsi (x:xs) = Just (x,xs)
It gives the following rather cryptic error message without -fglasgow-exts:
ConcatMap.hs:7:17:
Couldn't match expected type `.' (a rigid variable)
against inferred type `(->)'
`.' is bound by the type signature for `destroy'
at ConcatMap.hs:6:20
Probable cause: `listpsi' is applied to too few arguments
In the first argument of `g', namely `listpsi'
In the expression: g listpsi xs
The fact that ghc interpreted `.' as a type variable baffeled me for a moment. I would expect ghc to report a syntax error since the type is not syntactically Haskell98.
Change History
Note: See
TracTickets for help on using
tickets.
