summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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