summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/tc178.hs
blob: c676a2f7ebd30ba4d44efdb8d4b473a5964ff920 (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
36
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
{-# LANGUAGE FlexibleInstances #-}

-- This one tickled the kind-check in GHC.Tc.Utils.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