Cryptic type error message (should be syntax error)
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.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.5 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | Unknown |
| Architecture | Unknown |