blob: 2a181208d45118dad0554998f10a688f86d0e557 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
|