From 00cbbab3362578df44851442408a8b91a2a769fa Mon Sep 17 00:00:00 2001 From: Richard Eisenberg Date: Wed, 13 Jan 2016 23:29:17 -0500 Subject: 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 --- testsuite/tests/polykinds/T7438.stderr | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'testsuite/tests/polykinds/T7438.stderr') diff --git a/testsuite/tests/polykinds/T7438.stderr b/testsuite/tests/polykinds/T7438.stderr index 46b7181840..d3ed001879 100644 --- a/testsuite/tests/polykinds/T7438.stderr +++ b/testsuite/tests/polykinds/T7438.stderr @@ -1,19 +1,19 @@ T7438.hs:6:14: error: - • Couldn't match expected type ‘r1’ with actual type ‘r’ - ‘r1’ is untouchable + • Couldn't match expected type ‘t3’ with actual type ‘t2’ + ‘t3’ is untouchable inside the constraints: t1 ~ t bound by a pattern with constructor: Nil :: forall k (a :: k). Thrist a a, in an equation for ‘go’ at T7438.hs:6:4-6 - ‘r1’ is a rigid type variable bound by - the inferred type of go :: Thrist t t1 -> r -> r1 at T7438.hs:6:1 - ‘r’ is a rigid type variable bound by - the inferred type of go :: Thrist t t1 -> r -> r1 at T7438.hs:6:1 + ‘t3’ is a rigid type variable bound by + the inferred type of go :: Thrist t t1 -> t2 -> t3 at T7438.hs:6:1 + ‘t2’ is a rigid type variable bound by + the inferred type of go :: Thrist t t1 -> t2 -> t3 at T7438.hs:6:1 Possible fix: add a type signature for ‘go’ • In the expression: acc In an equation for ‘go’: go Nil acc = acc • Relevant bindings include - acc :: r (bound at T7438.hs:6:8) - go :: Thrist t t1 -> r -> r1 (bound at T7438.hs:6:1) + acc :: t2 (bound at T7438.hs:6:8) + go :: Thrist t t1 -> t2 -> t3 (bound at T7438.hs:6:1) -- cgit v1.2.1