summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFacundo Domínguez <facundo.dominguez@tweag.io>2016-12-20 08:39:10 -0300
committerFacundo Domínguez <facundo.dominguez@tweag.io>2017-01-06 15:17:23 -0300
commitc1ed9557ad4e40caa72b27693527e02887ddd896 (patch)
tree4b5910cb78266f377a073706267ad268397a3fee
parentc5452cc1a67e344ea694851d83e2534a6d829e45 (diff)
downloadhaskell-c1ed9557ad4e40caa72b27693527e02887ddd896.tar.gz
Have addModFinalizer expose the local type environment.
Kind inference in ghci was interfered when renaming of type splices introduced the HsSpliced data constructor. This patch has kind inference skip over it. Test Plan: ./validate Reviewers: simonpj, rrnewton, bgamari, goldfire, austin Subscribers: thomie, mboes Differential Revision: https://phabricator.haskell.org/D2886 GHC Trac Issues: #12985
-rw-r--r--compiler/typecheck/TcHsType.hs8
-rw-r--r--testsuite/tests/ghci/scripts/GhciKinds.script7
-rw-r--r--testsuite/tests/ghci/scripts/GhciKinds.stdout2
3 files changed, 17 insertions, 0 deletions
diff --git a/compiler/typecheck/TcHsType.hs b/compiler/typecheck/TcHsType.hs
index d96e74e6d9..3fa6077456 100644
--- a/compiler/typecheck/TcHsType.hs
+++ b/compiler/typecheck/TcHsType.hs
@@ -446,6 +446,14 @@ tc_infer_hs_type mode (HsKindSig ty sig)
= do { sig' <- tc_lhs_kind (kindLevel mode) sig
; ty' <- tc_lhs_type mode ty sig'
; return (ty', sig') }
+-- HsSpliced is an annotation produced by 'RnSplice.rnSpliceType' to communicate
+-- the splice location to the typechecker. Here we skip over it in order to have
+-- the same kind inferred for a given expression whether it was produced from
+-- splices or not.
+--
+-- See Note [Delaying modFinalizers in untyped splices].
+tc_infer_hs_type mode (HsSpliceTy (HsSpliced _ (HsSplicedTy ty)) _)
+ = tc_infer_hs_type mode ty
tc_infer_hs_type mode (HsDocTy ty _) = tc_infer_lhs_type mode ty
tc_infer_hs_type _ (HsCoreTy ty) = return (ty, typeKind ty)
tc_infer_hs_type mode other_ty
diff --git a/testsuite/tests/ghci/scripts/GhciKinds.script b/testsuite/tests/ghci/scripts/GhciKinds.script
index fa9401524c..a7220fef02 100644
--- a/testsuite/tests/ghci/scripts/GhciKinds.script
+++ b/testsuite/tests/ghci/scripts/GhciKinds.script
@@ -8,3 +8,10 @@
:seti -XRankNTypes
:kind! forall a. F (Maybe a)
+
+:set -XUnboxedTuples -XTemplateHaskell -XMagicHash
+:set -fprint-explicit-runtime-reps -fprint-explicit-kinds
+:set -fprint-explicit-foralls
+:m + GHC.Exts Language.Haskell.TH Language.Haskell.TH.Lib
+:m + Language.Haskell.TH.Syntax
+:k $(unboxedTupleT 2)
diff --git a/testsuite/tests/ghci/scripts/GhciKinds.stdout b/testsuite/tests/ghci/scripts/GhciKinds.stdout
index e34b84a42a..3556e621a4 100644
--- a/testsuite/tests/ghci/scripts/GhciKinds.stdout
+++ b/testsuite/tests/ghci/scripts/GhciKinds.stdout
@@ -9,3 +9,5 @@ F (Maybe Bool) :: *
= Char
forall a. F (Maybe a) :: *
= Char
+$(unboxedTupleT 2) :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep).
+ TYPE k0 -> TYPE k1 -> TYPE 'UnboxedTupleRep