diff options
author | Richard Eisenberg <eir@cis.upenn.edu> | 2016-01-13 23:29:17 -0500 |
---|---|---|
committer | Richard Eisenberg <eir@cis.upenn.edu> | 2016-01-27 09:33:26 -0500 |
commit | 00cbbab3362578df44851442408a8b91a2a769fa (patch) | |
tree | c8f79d003510e191adeab0d1b98f20ebde40d914 /testsuite/tests/th | |
parent | 2899aa580d633103fc551e36c977720b94f5b41c (diff) | |
download | haskell-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.hs | 6 | ||||
-rw-r--r-- | testsuite/tests/th/T11452.stderr | 15 | ||||
-rw-r--r-- | testsuite/tests/th/T2222.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/th/all.T | 1 |
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']) |