diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2015-03-04 11:59:47 +0000 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2015-03-04 12:00:21 +0000 |
commit | f66e0e695b0377c469fbe877d4850fc0ebca2010 (patch) | |
tree | f20d6e81e1d79e3e1d6e6cff923203e460f73d96 /testsuite/tests/polykinds | |
parent | d058bc9ce04e8397c8fd0a32a8654b83f3ef4af1 (diff) | |
download | haskell-f66e0e695b0377c469fbe877d4850fc0ebca2010.tar.gz |
A raft of small changes associated with -XConstrainedClassMethods
See Trac #7854. Specifically:
* Major clean up and simplification of check_op in checkValidClass;
specifically
- use checkValidType on the entire method-selector type to detect
ambiguity
- put a specific test for -XConstrainedClassMethods
* Make -XConstrainedClassMethods be implied by -XMultiParamTypeClasses
(a bit ad-hoc but see #7854), and document in the user manual.
* Do the checkAmbiguity test just once in TcValidity.checkValidType,
rather than repeatedly at every level. See Note [When to call checkAmbiguity]
* Add -XAllowAmbiguousTypes in GHC.IP, since 'ip' really is ambiguous.
(It's a rather magic function.)
* Improve location info for check_op in checkValidClass
* Update quite a few tests, which had genuinely-ambiguous class
method signatures. Some I fixed by making them unambiguous; some
by adding -XAllowAmbiguousTypes
Diffstat (limited to 'testsuite/tests/polykinds')
-rw-r--r-- | testsuite/tests/polykinds/T8566.hs | 1 | ||||
-rw-r--r-- | testsuite/tests/polykinds/T8566.stderr | 38 | ||||
-rw-r--r-- | testsuite/tests/polykinds/T9200.hs | 3 |
3 files changed, 22 insertions, 20 deletions
diff --git a/testsuite/tests/polykinds/T8566.hs b/testsuite/tests/polykinds/T8566.hs index ee5892ce25..248febb586 100644 --- a/testsuite/tests/polykinds/T8566.hs +++ b/testsuite/tests/polykinds/T8566.hs @@ -6,6 +6,7 @@ {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE AllowAmbiguousTypes #-} -- 'c' is ambiguous module T8566 where diff --git a/testsuite/tests/polykinds/T8566.stderr b/testsuite/tests/polykinds/T8566.stderr index 096f058791..168e890404 100644 --- a/testsuite/tests/polykinds/T8566.stderr +++ b/testsuite/tests/polykinds/T8566.stderr @@ -1,19 +1,19 @@ - -T8566.hs:31:9: - Could not deduce (C ('AA (t (I a ps)) as) ps fs0) - arising from a use of ‘c’ - from the context: C ('AA (t (I a ps)) as) ps fs - bound by the instance declaration at T8566.hs:29:10-67 - or from: 'AA t (a : as) ~ 'AA t1 as1 - bound by a pattern with constructor: - A :: forall (r :: [*]) (k :: BOX) (t :: k) (as :: [U *]). - I ('AA t as) r, - in an equation for ‘c’ - at T8566.hs:31:5 - The type variable ‘fs0’ is ambiguous - Relevant bindings include - c :: I ('AA t (a : as)) ps -> I ('AA t (a : as)) ps - (bound at T8566.hs:31:3) - In the expression: c undefined - In an equation for ‘c’: c A = c undefined - In the instance declaration for ‘C ('AA t (a : as)) ps fs’ +
+T8566.hs:32:9:
+ Could not deduce (C ('AA (t (I a ps)) as) ps fs0)
+ arising from a use of ‘c’
+ from the context: C ('AA (t (I a ps)) as) ps fs
+ bound by the instance declaration at T8566.hs:30:10-67
+ or from: 'AA t (a : as) ~ 'AA t1 as1
+ bound by a pattern with constructor:
+ A :: forall (r :: [*]) (k :: BOX) (t :: k) (as :: [U *]).
+ I ('AA t as) r,
+ in an equation for ‘c’
+ at T8566.hs:32:5
+ The type variable ‘fs0’ is ambiguous
+ Relevant bindings include
+ c :: I ('AA t (a : as)) ps -> I ('AA t (a : as)) ps
+ (bound at T8566.hs:32:3)
+ In the expression: c undefined
+ In an equation for ‘c’: c A = c undefined
+ In the instance declaration for ‘C ('AA t (a : as)) ps fs’
diff --git a/testsuite/tests/polykinds/T9200.hs b/testsuite/tests/polykinds/T9200.hs index ca050661a2..740536a516 100644 --- a/testsuite/tests/polykinds/T9200.hs +++ b/testsuite/tests/polykinds/T9200.hs @@ -2,12 +2,13 @@ TypeFamilies #-} module T9200 where +import Data.Proxy ------ -- test CUSK on classes class C (f :: k) (a :: k2) where - c_meth :: D a => () + c_meth :: D a => Proxy f -> Proxy a -> () class C () a => D a |