Spurious extra error message due to functional dependencies
One call site is ill-typed, but GHC reports a type error at every call site, not just the problematic one. In the original code, the problem occurred with a very common function (Data.Lens.view), so the avalanche of error messages made it difficult to find the problematic call site.
{-# LANGUAGE FlexibleInstances, FunctionalDependencies, MultiParamTypeClasses #-}
module Bug where
class FunDep lista a | lista -> a
instance FunDep [a] a
singleton :: FunDep lista a => a -> lista
singleton _ = undefined
-- this error is expected:
-- Couldn't match type 'Char' with '()'
-- arising from a functional dependency between
-- constraint 'FunDep [Char] ()' arising from a use of 'singleton'
-- instance 'FunDep [a] a'
illTyped :: [Char]
illTyped = singleton ()
-- but this one is not:
-- Couldn't match type '()' with 'Char'
-- arising from a functional dependency between constraints:
-- 'FunDep [Char] Char' arising from a use of 'singleton' (in 'wellTyped')
-- 'FunDep [Char] ()' arising from a use of 'singleton' (in 'illTyped')
wellTyped :: [Char]
wellTyped = singleton 'a'
The spurious error disappears if illTyped is commented out or moved after wellTyped.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |