@@ -1,19 +1,18 @@
1−{-# LANGUAGE CPP #-}
1+-- DataKinds is needed for deriveAll0 calls on GHC 8
2+{-# LANGUAGE DataKinds #-}
23{-# LANGUAGE FlexibleInstances #-}
34{-# LANGUAGE GADTs #-}
45{-# LANGUAGE GeneralizedNewtypeDeriving #-}
56{-# LANGUAGE StandaloneDeriving #-}
67{-# LANGUAGE DeriveGeneric #-}
8+{-# LANGUAGE TemplateHaskell #-}
79{-# LANGUAGE TypeFamilies #-}
810
911module DataFamilies.Types where
1012
13+import Generics.Deriving.TH (deriveAll0)
1114import Types (ApproxEq(..))
1215
13−#if __GLASGOW_HASKELL__ >= 706
14−import GHC.Generics
15−#endif
16−
1716data family Nullary a
1817data instance Nullary Int = C1 | C2 | C3 deriving (Eq, Show)
1918data instance Nullary Char = C4 deriving (Eq, Show)
@@ -41,12 +40,10 @@ data instance GADT a where
4140deriving instance Eq (GADT a)
4241deriving instance Show (GADT a)
4342
44−-- We only derive instances for GHC 7.6 and higher because GHC 7.4 has a bug
45−-- concerning generics and data families
43+-- We use generic-deriving to be able to derive Generic instances for
44+-- data families on GHC 7.4.
4645
47−#if __GLASGOW_HASKELL__ >= 706
48−deriving instance Generic (Nullary Int)
49−deriving instance Generic (Nullary Char)
50−deriving instance Generic (SomeType c () a)
51−deriving instance Generic (Approx a)
52−#endif
46+$(deriveAll0 'C1)
47+$(deriveAll0 'C4)
48+$(deriveAll0 'Approx)
49+$(deriveAll0 'Nullary)