blob: d466e487e9babff5608fd9ef673b4b8eb13726f3 (
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
37
38
|
{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, OverlappingInstances, 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 Data FooD a => Foo a
instance Foo a => Foo [a]
{-
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
-}
instance Foo [Char]
|