summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/tc178.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/typecheck/should_compile/tc178.hs')
-rw-r--r--testsuite/tests/typecheck/should_compile/tc178.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_compile/tc178.hs b/testsuite/tests/typecheck/should_compile/tc178.hs
new file mode 100644
index 0000000000..2a181208d4
--- /dev/null
+++ b/testsuite/tests/typecheck/should_compile/tc178.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE FlexibleInstances #-}
+
+-- This one tickled the kind-check in TcType.matchTys,
+-- which should use sub-kinding
+
+module ShouldCompile where
+
+type TypeRep = ()
+
+class Typeable2 t where
+ typeOf2 :: t a b -> TypeRep
+
+class Typeable1 t where
+ typeOf1 :: t a -> TypeRep
+
+class Typeable0 a where
+ typeOf0 :: a -> TypeRep
+
+instance Typeable2 (->) where
+ typeOf2 = undefined
+
+instance (Typeable2 t, Typeable0 a) => Typeable1 (t a) where
+ typeOf1 = undefined
+
+instance (Typeable1 t, Typeable0 a) => Typeable0 (t a) where
+ typeOf0 = undefined
+
+class Typeable0 a => Data0 a where
+ dataTypeOf0 :: a -> Bool
+
+instance (Data0 a, Data0 b) => Data0 (a -> b) where
+ dataTypeOf0 = undefined
+
+foo :: (Typeable0 a, Typeable0 b) => (a -> b) -> TypeRep
+foo f = typeOf0 f