Skip to content

Newtype deriving over phantom types broke between GHC 6.6.1 and GHC 6.8.1

Consider the following code:

{-# OPTIONS_GHC -fglasgow-exts -fallow-undecidable-instances #-}

data Lex data Glex

newtype Monomial ord = M [Int] deriving (Eq,Show)

instance Ord (Monomial Lex) where

compare (M xs) (M ys) = compare xs ys

instance Ord (Monomial Glex) where

compare (M xs) (M ys) = compare (sum xs, xs) (sum ys, ys)

-- newtype Polynomial ord = P [Monomial ord] deriving (Eq,Show,Ord) newtype Polynomial ord = P [Monomial ord] deriving (Eq,Show)

instance Ord (Monomial ord) => Ord (Polynomial ord) where

compare (P ts) (P us) = compare ts us

In 6.6.1, it was permissible to derive the Ord instance for Polynomial ord from the ord instance for Monomial ord - the commented out code would compile. In 6.8.1-3, the commented out code doesn't compile, so you have to do the derivation by hand, as shown.

Trac metadata
Trac field Value
Version 6.8.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information