summaryrefslogtreecommitdiff
path: root/compiler/prelude
diff options
context:
space:
mode:
authorRichard Eisenberg <eir@cis.upenn.edu>2015-12-24 14:33:19 -0500
committerRichard Eisenberg <eir@cis.upenn.edu>2015-12-24 14:37:39 -0500
commit2db18b8135335da2da9918b722699df684097be9 (patch)
tree660dd90916aa6568694bbe39cdab83c7af98c5d7 /compiler/prelude
parent48db13d279d592ed3044cbaf3513854bcb0d3dce (diff)
downloadhaskell-2db18b8135335da2da9918b722699df684097be9.tar.gz
Visible type application
This re-working of the typechecker algorithm is based on the paper "Visible type application", by Richard Eisenberg, Stephanie Weirich, and Hamidhasan Ahmed, to be published at ESOP'16. This patch introduces -XTypeApplications, which allows users to say, for example `id @Int`, which has type `Int -> Int`. See the changes to the user manual for details. This patch addresses tickets #10619, #5296, #10589.
Diffstat (limited to 'compiler/prelude')
-rw-r--r--compiler/prelude/PrimOp.hs2
-rw-r--r--compiler/prelude/TysPrim.hs16
-rw-r--r--compiler/prelude/TysWiredIn.hs6
3 files changed, 12 insertions, 12 deletions
diff --git a/compiler/prelude/PrimOp.hs b/compiler/prelude/PrimOp.hs
index 67a44cc462..66172acd24 100644
--- a/compiler/prelude/PrimOp.hs
+++ b/compiler/prelude/PrimOp.hs
@@ -536,7 +536,7 @@ primOpType op
Compare _occ ty -> compare_fun_ty ty
GenPrimOp _occ tyvars arg_tys res_ty ->
- mkInvForAllTys tyvars (mkFunTys arg_tys res_ty)
+ mkSpecForAllTys tyvars (mkFunTys arg_tys res_ty)
primOpOcc :: PrimOp -> OccName
primOpOcc op = case primOpInfo op of
diff --git a/compiler/prelude/TysPrim.hs b/compiler/prelude/TysPrim.hs
index a4715df0a6..14505850fd 100644
--- a/compiler/prelude/TysPrim.hs
+++ b/compiler/prelude/TysPrim.hs
@@ -648,7 +648,7 @@ mkProxyPrimTy k ty = TyConApp proxyPrimTyCon [k, ty]
proxyPrimTyCon :: TyCon
proxyPrimTyCon = mkPrimTyCon proxyPrimTyConName kind [Nominal,Nominal] VoidRep
- where kind = ForAllTy (Named kv Invisible) $
+ where kind = ForAllTy (Named kv Specified) $
mkFunTy k unliftedTypeKind
kv = kKiVar
k = mkTyVarTy kv
@@ -664,8 +664,8 @@ proxyPrimTyCon = mkPrimTyCon proxyPrimTyConName kind [Nominal,Nominal] VoidRep
eqPrimTyCon :: TyCon -- The representation type for equality predicates
-- See Note [The equality types story]
eqPrimTyCon = mkPrimTyCon eqPrimTyConName kind roles VoidRep
- where kind = ForAllTy (Named kv1 Invisible) $
- ForAllTy (Named kv2 Invisible) $
+ where kind = ForAllTy (Named kv1 Specified) $
+ ForAllTy (Named kv2 Specified) $
mkFunTys [k1, k2] unliftedTypeKind
[kv1, kv2] = mkTemplateTyVars [liftedTypeKind, liftedTypeKind]
k1 = mkTyVarTy kv1
@@ -678,8 +678,8 @@ eqPrimTyCon = mkPrimTyCon eqPrimTyConName kind roles VoidRep
eqReprPrimTyCon :: TyCon -- See Note [The equality types story]
eqReprPrimTyCon = mkPrimTyCon eqReprPrimTyConName kind
roles VoidRep
- where kind = ForAllTy (Named kv1 Invisible) $
- ForAllTy (Named kv2 Invisible) $
+ where kind = ForAllTy (Named kv1 Specified) $
+ ForAllTy (Named kv2 Specified) $
mkFunTys [k1, k2] unliftedTypeKind
[kv1, kv2] = mkTemplateTyVars [liftedTypeKind, liftedTypeKind]
k1 = mkTyVarTy kv1
@@ -693,8 +693,8 @@ eqPhantPrimTyCon :: TyCon
eqPhantPrimTyCon = mkPrimTyCon eqPhantPrimTyConName kind
[Nominal, Nominal, Phantom, Phantom]
VoidRep
- where kind = ForAllTy (Named kv1 Invisible) $
- ForAllTy (Named kv2 Invisible) $
+ where kind = ForAllTy (Named kv1 Specified) $
+ ForAllTy (Named kv2 Specified) $
mkFunTys [k1, k2] unliftedTypeKind
[kv1, kv2] = mkTemplateTyVars [liftedTypeKind, liftedTypeKind]
k1 = mkTyVarTy kv1
@@ -925,7 +925,7 @@ anyTyCon = mkFamilyTyCon anyTyConName kind [kKiVar] Nothing
Nothing
NotInjective
where
- kind = ForAllTy (Named kKiVar Invisible) (mkTyVarTy kKiVar)
+ kind = ForAllTy (Named kKiVar Specified) (mkTyVarTy kKiVar)
anyTypeOfKind :: Kind -> Type
anyTypeOfKind kind = TyConApp anyTyCon [kind]
diff --git a/compiler/prelude/TysWiredIn.hs b/compiler/prelude/TysWiredIn.hs
index 3c3eab66bf..02e693d5a0 100644
--- a/compiler/prelude/TysWiredIn.hs
+++ b/compiler/prelude/TysWiredIn.hs
@@ -573,7 +573,7 @@ mk_tuple boxity arity = (tycon, tuple_con)
in
( UnboxedTuple
, gHC_PRIM
- , mkInvForAllTys lev_tvs $
+ , mkSpecForAllTys lev_tvs $
mkFunTys (map tyVarKind open_tvs) $
unliftedTypeKind
, arity * 2
@@ -633,7 +633,7 @@ heqSCSelId, coercibleSCSelId :: Id
klass = mkClass tvs [] [sc_pred] [sc_sel_id] [] [] (mkAnd []) tycon
datacon = pcDataCon heqDataConName tvs [sc_pred] tycon
- kind = mkInvForAllTys [kv1, kv2] $ mkFunTys [k1, k2] constraintKind
+ kind = mkSpecForAllTys [kv1, kv2] $ mkFunTys [k1, k2] constraintKind
kv1:kv2:_ = drop 9 alphaTyVars -- gets "j" and "k"
k1 = mkTyVarTy kv1
k2 = mkTyVarTy kv2
@@ -654,7 +654,7 @@ heqSCSelId, coercibleSCSelId :: Id
klass = mkClass tvs [] [sc_pred] [sc_sel_id] [] [] (mkAnd []) tycon
datacon = pcDataCon coercibleDataConName tvs [sc_pred] tycon
- kind = mkInvForAllTys [kKiVar] $ mkFunTys [k, k] constraintKind
+ kind = mkSpecForAllTys [kKiVar] $ mkFunTys [k, k] constraintKind
k = mkTyVarTy kKiVar
[av,bv] = mkTemplateTyVars [k, k]
tvs = [kKiVar, av, bv]