summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/tc178.hs
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