From dc19b1a9e5404ee5fcaaf16b198772e1fc549fca Mon Sep 17 00:00:00 2001
From: Reiner Pope <reiner.pope@gmail.com>
Date: Tue, 13 Mar 2012 10:25:00 +1030
Subject: [PATCH] Test DeriveGeneric for data families

---
 tests/generics/GEq/GEq1.hs     |   14 ++++++++++++--
 tests/generics/GEq/GEq1.stdout |    1 +
 tests/generics/GEq/GEq2.hs     |   14 ++++++++++++--
 tests/generics/GEq/GEq2.stdout |    1 +
 tests/generics/GenCanDoRep0.hs |    5 +++++
 5 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/tests/generics/GEq/GEq1.hs b/tests/generics/GEq/GEq1.hs
index 01dedec..164535c 100644
--- a/tests/generics/GEq/GEq1.hs
+++ b/tests/generics/GEq/GEq1.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeOperators, DeriveGeneric #-}
+{-# LANGUAGE TypeOperators, DeriveGeneric, TypeFamilies, FlexibleInstances #-}
 
 module Main where
 
@@ -16,6 +16,10 @@ data D a = D0 | D1 { d11 :: a, d12 :: (D a) }
 data (:**:) a b = a :**: b
   deriving Generic
 
+data family F a b :: * -> *
+data instance F Int b c = F b Int c
+  deriving Generic
+
 -- Example values
 c0 = C0
 c1 = C1
@@ -27,15 +31,21 @@ d1 = D1 'p' D0
 p1 :: Int :**: Char
 p1 = 3 :**: 'p'
 
+f1 :: F Int Float Char
+f1 = F 0.0 3 'h'
+f2 = F 0.0 4 'h'
+
 -- Generic instances
 instance                   GEq C
 instance (GEq a)        => GEq (D a)
 instance (GEq a, GEq b) => GEq (a :**: b)
+instance (GEq b, GEq c) => GEq (F Int b c)
 
 -- Tests
 teq0 = geq c0 c1
 teq1 = geq d0 d1
 teq2 = geq d0 d0
 teq3 = geq p1 p1
+teq4 = geq f1 f2
 
-main = mapM_ print [teq0, teq1, teq2, teq3]
+main = mapM_ print [teq0, teq1, teq2, teq3, teq4]
diff --git a/tests/generics/GEq/GEq1.stdout b/tests/generics/GEq/GEq1.stdout
index a7f0546..3ce45b8 100644
--- a/tests/generics/GEq/GEq1.stdout
+++ b/tests/generics/GEq/GEq1.stdout
@@ -2,3 +2,4 @@ False
 False
 True
 True
+False
diff --git a/tests/generics/GEq/GEq2.hs b/tests/generics/GEq/GEq2.hs
index ac825aa..952dbde 100644
--- a/tests/generics/GEq/GEq2.hs
+++ b/tests/generics/GEq/GEq2.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeOperators, DefaultSignatures, FlexibleInstances, DeriveGeneric #-}
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleContexts, TypeFamilies #-}
 
 module Main where
 
@@ -53,6 +53,10 @@ data D a = D0 | D1 { d11 :: a, d12 :: (D a) }
 data (:**:) a b = a :**: b
   deriving Generic
 
+data family F a b :: * -> *
+data instance F Int b c = F b Int c
+  deriving Generic
+
 -- Example values
 c0 = C0
 c1 = C1
@@ -64,15 +68,21 @@ d1 = D1 'p' D0
 p1 :: Int :**: Char
 p1 = 3 :**: 'p'
 
+f1 :: F Int Float Char
+f1 = F 0.0 3 'h'
+f2 = F 0.0 4 'h'
+
 -- Generic instances
 instance                   GEq C
 instance (GEq a)        => GEq (D a)
 instance (GEq a, GEq b) => GEq (a :**: b)
+instance (GEq b, GEq c) => GEq (F Int b c)
 
 -- Tests
 teq0 = geq c0 c1
 teq1 = geq d0 d1
 teq2 = geq d0 d0
 teq3 = geq p1 p1
+teq4 = geq f1 f2
 
-main = mapM_ print [teq0, teq1, teq2, teq3]
+main = mapM_ print [teq0, teq1, teq2, teq3, teq4]
diff --git a/tests/generics/GEq/GEq2.stdout b/tests/generics/GEq/GEq2.stdout
index a7f0546..3ce45b8 100644
--- a/tests/generics/GEq/GEq2.stdout
+++ b/tests/generics/GEq/GEq2.stdout
@@ -2,3 +2,4 @@ False
 False
 True
 True
+False
diff --git a/tests/generics/GenCanDoRep0.hs b/tests/generics/GenCanDoRep0.hs
index a86416b..c6ef9dc 100644
--- a/tests/generics/GenCanDoRep0.hs
+++ b/tests/generics/GenCanDoRep0.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE TypeFamilies  #-}
 
 module CanDoRep0 where
 
@@ -21,3 +22,7 @@ data D a = D0 | D1 { d11 :: a, d12 :: (D a) }
 
 data (:*:) a b = a :*: b
   deriving Generic
+
+data family F a b :: * -> *
+data instance F Int s t = FInt Bool t s
+  deriving Generic
-- 
1.7.4.4

