summaryrefslogtreecommitdiff
path: root/testsuite/tests/th
diff options
context:
space:
mode:
authorRichard Eisenberg <eir@cis.upenn.edu>2016-01-13 23:29:17 -0500
committerRichard Eisenberg <eir@cis.upenn.edu>2016-01-27 09:33:26 -0500
commit00cbbab3362578df44851442408a8b91a2a769fa (patch)
treec8f79d003510e191adeab0d1b98f20ebde40d914 /testsuite/tests/th
parent2899aa580d633103fc551e36c977720b94f5b41c (diff)
downloadhaskell-00cbbab3362578df44851442408a8b91a2a769fa.tar.gz
Refactor the typechecker to use ExpTypes.
The idea here is described in [wiki:Typechecker]. Briefly, this refactor keeps solid track of "synthesis" mode vs "checking" in GHC's bidirectional type-checking algorithm. When in synthesis mode, the expected type is just an IORef to write to. In addition, this patch does a significant reworking of RebindableSyntax, allowing much more freedom in the types of the rebindable operators. For example, we can now have `negate :: Int -> Bool` and `(>>=) :: m a -> (forall x. a x -> m b) -> m b`. The magic is in tcSyntaxOp. This addresses tickets #11397, #11452, and #11458. Tests: typecheck/should_compile/{RebindHR,RebindNegate,T11397,T11458} th/T11452
Diffstat (limited to 'testsuite/tests/th')
-rw-r--r--testsuite/tests/th/T11452.hs6
-rw-r--r--testsuite/tests/th/T11452.stderr15
-rw-r--r--testsuite/tests/th/T2222.stderr2
-rw-r--r--testsuite/tests/th/all.T1
4 files changed, 23 insertions, 1 deletions
diff --git a/testsuite/tests/th/T11452.hs b/testsuite/tests/th/T11452.hs
new file mode 100644
index 0000000000..8d91ee47c9
--- /dev/null
+++ b/testsuite/tests/th/T11452.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE RankNTypes, TemplateHaskell #-}
+
+module T11452 where
+
+impred :: (forall a. a -> a) -> ()
+impred = $$( [|| \_ -> () ||] )
diff --git a/testsuite/tests/th/T11452.stderr b/testsuite/tests/th/T11452.stderr
new file mode 100644
index 0000000000..f59fcbd7d2
--- /dev/null
+++ b/testsuite/tests/th/T11452.stderr
@@ -0,0 +1,15 @@
+
+T11452.hs:6:14: error:
+ • Illegal polytype: (forall a. a -> a) -> ()
+ The type of a Typed Template Haskell expression must not have any quantification.
+ • In the Template Haskell splice $$([|| \ _ -> () ||])
+ In the expression: $$([|| \ _ -> () ||])
+ In an equation for ‘impred’: impred = $$([|| \ _ -> () ||])
+
+T11452.hs:6:14: error:
+ • Cannot instantiate unification variable ‘t0’
+ with a type involving foralls: forall a. a -> a
+ GHC doesn't yet support impredicative polymorphism
+ • In the Template Haskell quotation [|| \ _ -> () ||]
+ In the expression: [|| \ _ -> () ||]
+ In the Template Haskell splice $$([|| \ _ -> () ||])
diff --git a/testsuite/tests/th/T2222.stderr b/testsuite/tests/th/T2222.stderr
index b0a7e9f799..4ddf100bf6 100644
--- a/testsuite/tests/th/T2222.stderr
+++ b/testsuite/tests/th/T2222.stderr
@@ -1,4 +1,4 @@
-inside b: a_0
+inside b: t_0
inside d: GHC.Types.Bool
type of c: GHC.Types.Bool
inside f: GHC.Types.Bool
diff --git a/testsuite/tests/th/all.T b/testsuite/tests/th/all.T
index db6ee4e399..3d040b6e52 100644
--- a/testsuite/tests/th/all.T
+++ b/testsuite/tests/th/all.T
@@ -398,3 +398,4 @@ test('T11345', normal, compile_and_run, ['-v0 -dsuppress-uniques'])
test('TH_finalizer', normal, compile, ['-v0'])
test('T10603', normal, compile, ['-ddump-splices -dsuppress-uniques'])
+test('T11452', normal, compile_fail, ['-v0'])