diff options
-rw-r--r-- | compiler/typecheck/TcHsType.hs | 8 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/GhciKinds.script | 7 | ||||
-rw-r--r-- | testsuite/tests/ghci/scripts/GhciKinds.stdout | 2 |
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 |