summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/T1470.hs
blob: 2482696452ebf807a9e21988e5ee0d326f16820f (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
{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, UndecidableInstances, KindSignatures #-}

-- Trac #1470

module Foo where

class Sat a
class Data (ctx :: * -> *) a
instance  Sat (ctx Char)             => Data ctx Char
instance (Sat (ctx [a]), Data ctx a) => Data ctx [a]

class Data FooD a => Foo a

data FooD a = FooD

instance Foo t => Sat (FooD t)

instance {-# OVERLAPPABLE #-} Data FooD a => Foo a
instance {-# OVERLAPS #-}     Foo a       => Foo [a]
instance {-# OVERLAPPING #-}                 Foo [Char]
{-
 Given:                Foo a,
 and its superclasses: Data FooD a

 Want superclass: Data FooD [a]

 by instance Data FooD [a]
 want:   Sat (FooD [a])
         Data FooD a      -- We have this

 by instance Sat (FooD t)
 want:   Foo [a]

BUT THIS INSTANCE OVERLAPS
-}