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.