[commit: testsuite] master: Adding test case for polytype decomposition in the constraint solver. (fa6bb22)
dimitris at microsoft.com
dimitris at microsoft.com
Tue Apr 10 10:58:33 CEST 2012
Repository : ssh://darcs.haskell.org//srv/darcs/testsuite
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/fa6bb222739634e5a6a6abc6b4831c2a2b18a362
>---------------------------------------------------------------
commit fa6bb222739634e5a6a6abc6b4831c2a2b18a362
Author: Dimitrios.Vytiniotis <dimitris at microsoft.com>
Date: Tue Apr 10 02:12:13 2012 +0100
Adding test case for polytype decomposition in the constraint solver.
>---------------------------------------------------------------
tests/typecheck/should_compile/PolytypeDecomp.hs | 32 ++++++++++++++++++++++
tests/typecheck/should_compile/all.T | 2 +
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/tests/typecheck/should_compile/PolytypeDecomp.hs b/tests/typecheck/should_compile/PolytypeDecomp.hs
new file mode 100644
index 0000000..69e4fb3
--- /dev/null
+++ b/tests/typecheck/should_compile/PolytypeDecomp.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE TypeFamilies, LiberalTypeSynonyms, ImpredicativeTypes #-}
+module PolyTypeDecomp where
+
+
+{- The purpose of this test is to check if decomposition of wanted
+ equalities in the /constraint solver/ (vs. the unifier) works properly.
+ Unfortunately most equalities between polymorphic types are converted to
+ implication constraints early on in the unifier, so we have to make things
+ a bit more convoluted by introducing the myLength function. The wanted
+ constraints we get for this program are:
+ [forall a. Maybe a] ~ Id alpha
+ [forall a. F [a]] ~ Id alpha
+ Which, /after reactions/ should create a fresh implication:
+ forall a. Maybe a ~ F [a]
+ that is perfectly soluble.
+-}
+
+type family F a
+type instance F [a] = Maybe a
+
+type family Id a
+type instance Id a = a
+
+f :: [forall a. F [a]]
+f = undefined
+
+
+g :: [forall a. Maybe a] -> Int
+g x = myLength [x,f]
+
+myLength :: [Id a] -> Int
+myLength = undefined
diff --git a/tests/typecheck/should_compile/all.T b/tests/typecheck/should_compile/all.T
index 5fcd89f..918d5c8 100644
--- a/tests/typecheck/should_compile/all.T
+++ b/tests/typecheck/should_compile/all.T
@@ -375,3 +375,5 @@ test('T3108', normal, compile, [''])
test('T5792',normal,run_command,
['$MAKE -s --no-print-directory T5792'])
+
+test('PolytypeDecomp', normal, compile, [''])
\ No newline at end of file
More information about the Cvs-ghc
mailing list