overlapping instances in 6.6 candidate
Serge D. Mechveliani
mechvel at botik.ru
Sat Sep 2 07:29:59 EDT 2006
Dear GHC developers,
Can you, please, explain what has happened in 6.5.20060831
with treating of overlapping instances?
It seems to understand them differently than ghc-6.4.1.
For example, I compile the module
------------------------
class C a where c :: a -> Bool
instance C Int where c n = n > 0
instance C a => C [a] where c xs = and $ map c xs
instance C [Int] where c xs = c $ head xs
main = putStr (shows (c [1, (-2 :: Int)]) "\n")
instance Show [Bool] where showsPrec _ xs = shows (head xs)
------------------------
with the options
$dmCpOpt =
-fglasgow-exts -fallow-undecidable-instances
-fallow-overlapping-instances -fno-warn-overlapping-patterns
-fwarn-unused-binds -fwarn-unused-matches -fwarn-unused-imports
:
> ghc $dmCpOpt --make Main
It reports
--------------------------------------------------------
[1 of 1] Compiling Main ( Main.hs, Main.o )
Main.hs:11:0:
Overlapping instances for Show [Bool]
arising from use of `GHC.Show.$dmshowList' at Main.hs:11:0
Matching instances:
instance (Show a) => Show [a] -- Defined in GHC.Show
instance [overlap ok] Show [Bool] -- Defined at Main.hs:11:0
In the expression: GHC.Show.$dmshowList
In the definition of `showList': showList = GHC.Show.$dmshowList
In the definition for method `showList'
--------------------------------------------
And it takes as all right the overlaps for the class C.
[Bool] is a substitutional instance of [a], and according to the GHC
specification, the Show instance for [Bool] must override the more generic
one for Show a => [a].
Thank you in advance for explanation.
-----------------
Serge Mechveliani
mechvel at botik.ru
More information about the Glasgow-haskell-users
mailing list