summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/T3108.hs
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2014-07-31 15:49:14 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2014-07-31 15:49:45 +0100
commit1ae5fa451f4f554e0d652d55f9312a585188ce13 (patch)
tree1d0ef82924eedf6803b48b8d0ba7748f9622b227 /testsuite/tests/typecheck/should_compile/T3108.hs
parentbfaa17998ed0cb8b22132d8e824b274ac5f038cc (diff)
downloadhaskell-1ae5fa451f4f554e0d652d55f9312a585188ce13.tar.gz
Complete work on new OVERLAPPABLE/OVERLAPPING pragmas (Trac #9242)
* Deprecate -XOverlappingInstances * Update test suite. Several tests even had entirely unnecessary uses of -XOverlappingInstances * Update user manual with a careful description of the instance resolution story * Fix an outright bug in the handling of duplidate instances in GHCi, which are meant to silently overwrite the earlier duplicate. The logic was right for family instances but was both more complicated, and plain wrong, for class instances. (If you are interested, the bug was that we were eliminating the duplicate from the InstEnv, but not from the [ClsInst] held in tcg_insts.) Test is ghci044a.
Diffstat (limited to 'testsuite/tests/typecheck/should_compile/T3108.hs')
-rw-r--r--testsuite/tests/typecheck/should_compile/T3108.hs14
1 files changed, 7 insertions, 7 deletions
diff --git a/testsuite/tests/typecheck/should_compile/T3108.hs b/testsuite/tests/typecheck/should_compile/T3108.hs
index 774d5f3801..2adaa1aef7 100644
--- a/testsuite/tests/typecheck/should_compile/T3108.hs
+++ b/testsuite/tests/typecheck/should_compile/T3108.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverlappingInstances, UndecidableInstances, MultiParamTypeClasses,
+{-# LANGUAGE UndecidableInstances, MultiParamTypeClasses,
FunctionalDependencies, FlexibleInstances #-}
module T3108 where
@@ -10,9 +10,9 @@ class C0 x
m0 :: x -> ()
m0 = const undefined
-instance (C0 x, C0 y) => C0 (x,y)
-instance C0 Bool
-instance C0 (x,Bool) => C0 x
+instance {-# OVERLAPPING #-} (C0 x, C0 y) => C0 (x,y)
+instance {-# OVERLAPPING #-} C0 Bool
+instance {-# OVERLAPPABLE #-} C0 (x,Bool) => C0 x
foo :: ()
foo = m0 (1::Int)
@@ -25,9 +25,9 @@ class C1 x
m1 :: x -> ()
m1 = const undefined
-instance (C1 x, C1 y) => C1 (x,y)
-instance C1 Bool
-instance (C2 x y, C1 (y,Bool)) => C1 x
+instance {-# OVERLAPPING #-} (C1 x, C1 y) => C1 (x,y)
+instance {-# OVERLAPPING #-} C1 Bool
+instance {-# OVERLAPPABLE #-} (C2 x y, C1 (y,Bool)) => C1 x
class C2 x y | x -> y
instance C2 Int Int