{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}
module GHC.Builtin.Types.Prim(
mkTemplateKindVar, mkTemplateKindVars,
mkTemplateTyVars, mkTemplateTyVarsFrom,
mkTemplateKiTyVars, mkTemplateKiTyVar,
mkTemplateTyConBinders, mkTemplateKindTyConBinders,
mkTemplateAnonTyConBinders,
alphaTyVars, alphaTyVar, betaTyVar, gammaTyVar, deltaTyVar,
alphaTyVarSpec, betaTyVarSpec, gammaTyVarSpec, deltaTyVarSpec,
alphaTys, alphaTy, betaTy, gammaTy, deltaTy,
alphaTyVarsUnliftedRep, alphaTyVarUnliftedRep,
alphaTysUnliftedRep, alphaTyUnliftedRep,
runtimeRep1TyVar, runtimeRep2TyVar, runtimeRep3TyVar,
runtimeRep1TyVarInf, runtimeRep2TyVarInf,
runtimeRep1Ty, runtimeRep2Ty, runtimeRep3Ty,
levity1TyVar, levity2TyVar,
levity1TyVarInf, levity2TyVarInf,
levity1Ty, levity2Ty,
alphaConstraintTyVar, alphaConstraintTy,
openAlphaTyVar, openBetaTyVar, openGammaTyVar,
openAlphaTyVarSpec, openBetaTyVarSpec, openGammaTyVarSpec,
openAlphaTy, openBetaTy, openGammaTy,
levPolyAlphaTyVar, levPolyBetaTyVar,
levPolyAlphaTyVarSpec, levPolyBetaTyVarSpec,
levPolyAlphaTy, levPolyBetaTy,
multiplicityTyVar1, multiplicityTyVar2,
tYPETyCon, tYPETyConName, tYPEKind,
cONSTRAINTTyCon, cONSTRAINTTyConName, cONSTRAINTKind,
funTyFlagTyCon, isArrowTyCon,
fUNTyCon, fUNTyConName,
ctArrowTyCon, ctArrowTyConName,
ccArrowTyCon, ccArrowTyConName,
tcArrowTyCon, tcArrowTyConName,
unexposedPrimTyCons, exposedPrimTyCons, primTyCons,
charPrimTyCon, charPrimTy, charPrimTyConName,
intPrimTyCon, intPrimTy, intPrimTyConName,
wordPrimTyCon, wordPrimTy, wordPrimTyConName,
addrPrimTyCon, addrPrimTy, addrPrimTyConName,
floatPrimTyCon, floatPrimTy, floatPrimTyConName,
doublePrimTyCon, doublePrimTy, doublePrimTyConName,
statePrimTyCon, mkStatePrimTy,
realWorldTyCon, realWorldTy,
realWorldStatePrimTy, realWorldMutableByteArrayPrimTy,
proxyPrimTyCon, mkProxyPrimTy,
arrayPrimTyCon, mkArrayPrimTy,
byteArrayPrimTyCon, byteArrayPrimTy,
smallArrayPrimTyCon, mkSmallArrayPrimTy,
mutableArrayPrimTyCon, mkMutableArrayPrimTy,
mutableByteArrayPrimTyCon, mkMutableByteArrayPrimTy,
smallMutableArrayPrimTyCon, mkSmallMutableArrayPrimTy,
mutVarPrimTyCon, mkMutVarPrimTy,
mVarPrimTyCon, mkMVarPrimTy,
ioPortPrimTyCon, mkIOPortPrimTy,
tVarPrimTyCon, mkTVarPrimTy,
stablePtrPrimTyCon, mkStablePtrPrimTy,
stableNamePrimTyCon, mkStableNamePrimTy,
compactPrimTyCon, compactPrimTy,
bcoPrimTyCon, bcoPrimTy,
weakPrimTyCon, mkWeakPrimTy,
threadIdPrimTyCon, threadIdPrimTy,
stackSnapshotPrimTyCon, stackSnapshotPrimTy,
promptTagPrimTyCon, mkPromptTagPrimTy,
int8PrimTyCon, int8PrimTy, int8PrimTyConName,
word8PrimTyCon, word8PrimTy, word8PrimTyConName,
int16PrimTyCon, int16PrimTy, int16PrimTyConName,
word16PrimTyCon, word16PrimTy, word16PrimTyConName,
int32PrimTyCon, int32PrimTy, int32PrimTyConName,
word32PrimTyCon, word32PrimTy, word32PrimTyConName,
int64PrimTyCon, int64PrimTy, int64PrimTyConName,
word64PrimTyCon, word64PrimTy, word64PrimTyConName,
eqPrimTyCon,
eqReprPrimTyCon,
eqPhantPrimTyCon,
equalityTyCon,
#include "primop-vector-tys-exports.hs-incl"
) where
import GHC.Prelude
import {-# SOURCE #-} GHC.Builtin.Types
( runtimeRepTy, levityTy, unboxedTupleKind, liftedTypeKind, unliftedTypeKind
, boxedRepDataConTyCon, vecRepDataConTyCon
, liftedRepTy, unliftedRepTy, zeroBitRepTy
, intRepDataConTy
, int8RepDataConTy, int16RepDataConTy, int32RepDataConTy, int64RepDataConTy
, wordRepDataConTy
, word16RepDataConTy, word8RepDataConTy, word32RepDataConTy, word64RepDataConTy
, addrRepDataConTy
, floatRepDataConTy, doubleRepDataConTy
, vec2DataConTy, vec4DataConTy, vec8DataConTy, vec16DataConTy, vec32DataConTy
, vec64DataConTy
, int8ElemRepDataConTy, int16ElemRepDataConTy, int32ElemRepDataConTy
, int64ElemRepDataConTy, word8ElemRepDataConTy, word16ElemRepDataConTy
, word32ElemRepDataConTy, word64ElemRepDataConTy, floatElemRepDataConTy
, doubleElemRepDataConTy
, multiplicityTy
, constraintKind )
import {-# SOURCE #-} GHC.Types.TyThing( mkATyCon )
import {-# SOURCE #-} GHC.Core.Type ( mkTyConApp, getLevity )
import GHC.Core.TyCon
import GHC.Core.TyCo.Rep
import GHC.Types.Var ( TyVarBinder, TyVar,binderVar, binderVars
, mkTyVar, mkTyVarBinder, mkTyVarBinders )
import GHC.Types.Name
import GHC.Types.SrcLoc
import GHC.Types.Unique
import GHC.Builtin.Uniques
import GHC.Builtin.Names
import GHC.Utils.Misc ( changeLast )
import GHC.Utils.Panic ( assertPpr )
import GHC.Utils.Outputable
import GHC.Data.FastString
import Data.Char
mk_TYPE_app :: Type -> Type
mk_TYPE_app :: Type -> Type
mk_TYPE_app Type
rep = TyCon -> [Type] -> Type
mkTyConApp TyCon
tYPETyCon [Type
rep]
mk_CONSTRAINT_app :: Type -> Type
mk_CONSTRAINT_app :: Type -> Type
mk_CONSTRAINT_app Type
rep = TyCon -> [Type] -> Type
mkTyConApp TyCon
cONSTRAINTTyCon [Type
rep]
mkPrimTc :: FastString -> Unique -> TyCon -> Name
mkPrimTc :: FastString -> Unique -> TyCon -> Name
mkPrimTc = BuiltInSyntax -> FastString -> Unique -> TyCon -> Name
mkGenPrimTc BuiltInSyntax
UserSyntax
mkBuiltInPrimTc :: FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc :: FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc = BuiltInSyntax -> FastString -> Unique -> TyCon -> Name
mkGenPrimTc BuiltInSyntax
BuiltInSyntax
mkGenPrimTc :: BuiltInSyntax -> FastString -> Unique -> TyCon -> Name
mkGenPrimTc :: BuiltInSyntax -> FastString -> Unique -> TyCon -> Name
mkGenPrimTc BuiltInSyntax
built_in_syntax FastString
occ Unique
key TyCon
tycon
= Module -> OccName -> Unique -> TyThing -> BuiltInSyntax -> Name
mkWiredInName Module
gHC_PRIM (FastString -> OccName
mkTcOccFS FastString
occ)
Unique
key
(TyCon -> TyThing
mkATyCon TyCon
tycon)
BuiltInSyntax
built_in_syntax
pcPrimTyCon :: Name
-> [Role] -> RuntimeRepType -> TyCon
pcPrimTyCon :: Name -> [Role] -> Type -> TyCon
pcPrimTyCon Name
name [Role]
roles Type
res_rep
= Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
name [TyConBinder]
binders Type
result_kind [Role]
roles
where
bndr_kis :: [Type]
bndr_kis = Type
liftedTypeKind Type -> [Role] -> [Type]
forall a b. a -> [b] -> [a]
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Role]
roles
binders :: [TyConBinder]
binders = [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [Type]
bndr_kis
result_kind :: Type
result_kind = Type -> Type
mk_TYPE_app Type
res_rep
pcPrimTyCon0 :: Name -> RuntimeRepType -> TyCon
pcPrimTyCon0 :: Name -> Type -> TyCon
pcPrimTyCon0 Name
name Type
res_rep
= Name -> [Role] -> Type -> TyCon
pcPrimTyCon Name
name [] Type
res_rep
pcPrimTyCon_LevPolyLastArg :: Name
-> [Role]
-> RuntimeRepType
-> TyCon
pcPrimTyCon_LevPolyLastArg :: Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
name [Role]
roles Type
res_rep
= Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
name [TyConBinder]
binders Type
result_kind (Role
Nominal Role -> [Role] -> [Role]
forall a. a -> [a] -> [a]
: [Role]
roles)
where
result_kind :: Type
result_kind = Type -> Type
mk_TYPE_app Type
res_rep
lev_bndr :: TyConBinder
lev_bndr = ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
levity1TyVar
binders :: [TyConBinder]
binders = TyConBinder
lev_bndr TyConBinder -> [TyConBinder] -> [TyConBinder]
forall a. a -> [a] -> [a]
: [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [Type]
anon_bndr_kis
lev_tv :: Type
lev_tv = TyVar -> Type
mkTyVarTy (TyConBinder -> TyVar
forall tv argf. VarBndr tv argf -> tv
binderVar TyConBinder
lev_bndr)
anon_bndr_kis :: [Type]
anon_bndr_kis = [Type] -> Type -> [Type]
forall a. [a] -> a -> [a]
changeLast (Type
liftedTypeKind Type -> [Role] -> [Type]
forall a b. a -> [b] -> [a]
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Role]
roles) (Type -> [Type]) -> Type -> [Type]
forall a b. (a -> b) -> a -> b
$
Type -> Type
mk_TYPE_app (Type -> Type) -> Type -> Type
forall a b. (a -> b) -> a -> b
$
TyCon -> [Type] -> Type
mkTyConApp TyCon
boxedRepDataConTyCon [Type
lev_tv]
primTyCons :: [TyCon]
primTyCons :: [TyCon]
primTyCons = [TyCon]
unexposedPrimTyCons [TyCon] -> [TyCon] -> [TyCon]
forall a. [a] -> [a] -> [a]
++ [TyCon]
exposedPrimTyCons
unexposedPrimTyCons :: [TyCon]
unexposedPrimTyCons :: [TyCon]
unexposedPrimTyCons
= [ TyCon
eqPrimTyCon
, TyCon
eqReprPrimTyCon
, TyCon
eqPhantPrimTyCon
, TyCon
ctArrowTyCon
, TyCon
ccArrowTyCon
, TyCon
tcArrowTyCon
]
exposedPrimTyCons :: [TyCon]
exposedPrimTyCons :: [TyCon]
exposedPrimTyCons
= [ TyCon
addrPrimTyCon
, TyCon
arrayPrimTyCon
, TyCon
byteArrayPrimTyCon
, TyCon
smallArrayPrimTyCon
, TyCon
charPrimTyCon
, TyCon
doublePrimTyCon
, TyCon
floatPrimTyCon
, TyCon
intPrimTyCon
, TyCon
int8PrimTyCon
, TyCon
int16PrimTyCon
, TyCon
int32PrimTyCon
, TyCon
int64PrimTyCon
, TyCon
bcoPrimTyCon
, TyCon
weakPrimTyCon
, TyCon
mutableArrayPrimTyCon
, TyCon
mutableByteArrayPrimTyCon
, TyCon
smallMutableArrayPrimTyCon
, TyCon
mVarPrimTyCon
, TyCon
ioPortPrimTyCon
, TyCon
tVarPrimTyCon
, TyCon
mutVarPrimTyCon
, TyCon
realWorldTyCon
, TyCon
stablePtrPrimTyCon
, TyCon
stableNamePrimTyCon
, TyCon
compactPrimTyCon
, TyCon
statePrimTyCon
, TyCon
proxyPrimTyCon
, TyCon
threadIdPrimTyCon
, TyCon
wordPrimTyCon
, TyCon
word8PrimTyCon
, TyCon
word16PrimTyCon
, TyCon
word32PrimTyCon
, TyCon
word64PrimTyCon
, TyCon
stackSnapshotPrimTyCon
, TyCon
promptTagPrimTyCon
, TyCon
fUNTyCon
, TyCon
tYPETyCon
, TyCon
cONSTRAINTTyCon
#include "primop-vector-tycons.hs-incl"
]
charPrimTyConName, intPrimTyConName, int8PrimTyConName, int16PrimTyConName, int32PrimTyConName, int64PrimTyConName,
wordPrimTyConName, word32PrimTyConName, word8PrimTyConName, word16PrimTyConName, word64PrimTyConName,
addrPrimTyConName, floatPrimTyConName, doublePrimTyConName,
statePrimTyConName, proxyPrimTyConName, realWorldTyConName,
arrayPrimTyConName, smallArrayPrimTyConName, byteArrayPrimTyConName,
mutableArrayPrimTyConName, mutableByteArrayPrimTyConName,
smallMutableArrayPrimTyConName, mutVarPrimTyConName, mVarPrimTyConName,
ioPortPrimTyConName, tVarPrimTyConName, stablePtrPrimTyConName,
stableNamePrimTyConName, compactPrimTyConName, bcoPrimTyConName,
weakPrimTyConName, threadIdPrimTyConName,
eqPrimTyConName, eqReprPrimTyConName, eqPhantPrimTyConName,
stackSnapshotPrimTyConName, promptTagPrimTyConName :: Name
charPrimTyConName :: Name
charPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Char#") Unique
charPrimTyConKey TyCon
charPrimTyCon
intPrimTyConName :: Name
intPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Int#") Unique
intPrimTyConKey TyCon
intPrimTyCon
int8PrimTyConName :: Name
int8PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Int8#") Unique
int8PrimTyConKey TyCon
int8PrimTyCon
int16PrimTyConName :: Name
int16PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Int16#") Unique
int16PrimTyConKey TyCon
int16PrimTyCon
int32PrimTyConName :: Name
int32PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Int32#") Unique
int32PrimTyConKey TyCon
int32PrimTyCon
int64PrimTyConName :: Name
int64PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Int64#") Unique
int64PrimTyConKey TyCon
int64PrimTyCon
wordPrimTyConName :: Name
wordPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Word#") Unique
wordPrimTyConKey TyCon
wordPrimTyCon
word8PrimTyConName :: Name
word8PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Word8#") Unique
word8PrimTyConKey TyCon
word8PrimTyCon
word16PrimTyConName :: Name
word16PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Word16#") Unique
word16PrimTyConKey TyCon
word16PrimTyCon
word32PrimTyConName :: Name
word32PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Word32#") Unique
word32PrimTyConKey TyCon
word32PrimTyCon
word64PrimTyConName :: Name
word64PrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Word64#") Unique
word64PrimTyConKey TyCon
word64PrimTyCon
addrPrimTyConName :: Name
addrPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Addr#") Unique
addrPrimTyConKey TyCon
addrPrimTyCon
floatPrimTyConName :: Name
floatPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Float#") Unique
floatPrimTyConKey TyCon
floatPrimTyCon
doublePrimTyConName :: Name
doublePrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Double#") Unique
doublePrimTyConKey TyCon
doublePrimTyCon
statePrimTyConName :: Name
statePrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"State#") Unique
statePrimTyConKey TyCon
statePrimTyCon
proxyPrimTyConName :: Name
proxyPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Proxy#") Unique
proxyPrimTyConKey TyCon
proxyPrimTyCon
eqPrimTyConName :: Name
eqPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"~#") Unique
eqPrimTyConKey TyCon
eqPrimTyCon
eqReprPrimTyConName :: Name
eqReprPrimTyConName = FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc (String -> FastString
fsLit String
"~R#") Unique
eqReprPrimTyConKey TyCon
eqReprPrimTyCon
eqPhantPrimTyConName :: Name
eqPhantPrimTyConName = FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc (String -> FastString
fsLit String
"~P#") Unique
eqPhantPrimTyConKey TyCon
eqPhantPrimTyCon
realWorldTyConName :: Name
realWorldTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"RealWorld") Unique
realWorldTyConKey TyCon
realWorldTyCon
arrayPrimTyConName :: Name
arrayPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Array#") Unique
arrayPrimTyConKey TyCon
arrayPrimTyCon
byteArrayPrimTyConName :: Name
byteArrayPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"ByteArray#") Unique
byteArrayPrimTyConKey TyCon
byteArrayPrimTyCon
smallArrayPrimTyConName :: Name
smallArrayPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"SmallArray#") Unique
smallArrayPrimTyConKey TyCon
smallArrayPrimTyCon
mutableArrayPrimTyConName :: Name
mutableArrayPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"MutableArray#") Unique
mutableArrayPrimTyConKey TyCon
mutableArrayPrimTyCon
mutableByteArrayPrimTyConName :: Name
mutableByteArrayPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"MutableByteArray#") Unique
mutableByteArrayPrimTyConKey TyCon
mutableByteArrayPrimTyCon
smallMutableArrayPrimTyConName :: Name
smallMutableArrayPrimTyConName= FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"SmallMutableArray#") Unique
smallMutableArrayPrimTyConKey TyCon
smallMutableArrayPrimTyCon
mutVarPrimTyConName :: Name
mutVarPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"MutVar#") Unique
mutVarPrimTyConKey TyCon
mutVarPrimTyCon
ioPortPrimTyConName :: Name
ioPortPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"IOPort#") Unique
ioPortPrimTyConKey TyCon
ioPortPrimTyCon
mVarPrimTyConName :: Name
mVarPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"MVar#") Unique
mVarPrimTyConKey TyCon
mVarPrimTyCon
tVarPrimTyConName :: Name
tVarPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"TVar#") Unique
tVarPrimTyConKey TyCon
tVarPrimTyCon
stablePtrPrimTyConName :: Name
stablePtrPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"StablePtr#") Unique
stablePtrPrimTyConKey TyCon
stablePtrPrimTyCon
stableNamePrimTyConName :: Name
stableNamePrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"StableName#") Unique
stableNamePrimTyConKey TyCon
stableNamePrimTyCon
compactPrimTyConName :: Name
compactPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Compact#") Unique
compactPrimTyConKey TyCon
compactPrimTyCon
stackSnapshotPrimTyConName :: Name
stackSnapshotPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"StackSnapshot#") Unique
stackSnapshotPrimTyConKey TyCon
stackSnapshotPrimTyCon
bcoPrimTyConName :: Name
bcoPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"BCO") Unique
bcoPrimTyConKey TyCon
bcoPrimTyCon
weakPrimTyConName :: Name
weakPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"Weak#") Unique
weakPrimTyConKey TyCon
weakPrimTyCon
threadIdPrimTyConName :: Name
threadIdPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"ThreadId#") Unique
threadIdPrimTyConKey TyCon
threadIdPrimTyCon
promptTagPrimTyConName :: Name
promptTagPrimTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"PromptTag#") Unique
promptTagPrimTyConKey TyCon
promptTagPrimTyCon
mkTemplateKindVar :: Kind -> TyVar
mkTemplateKindVar :: Type -> TyVar
mkTemplateKindVar = Name -> Type -> TyVar
mkTyVar (Int -> String -> Name
mk_tv_name Int
0 String
"k")
mkTemplateKindVars :: [Kind] -> [TyVar]
mkTemplateKindVars :: [Type] -> [TyVar]
mkTemplateKindVars [Type
kind] = [Type -> TyVar
mkTemplateKindVar Type
kind]
mkTemplateKindVars [Type]
kinds
= [ Name -> Type -> TyVar
mkTyVar (Int -> String -> Name
mk_tv_name Int
u (Char
'k' Char -> String -> String
forall a. a -> [a] -> [a]
: Int -> String
forall a. Show a => a -> String
show Int
u)) Type
kind
| (Type
kind, Int
u) <- [Type]
kinds [Type] -> [Int] -> [(Type, Int)]
forall a b. [a] -> [b] -> [(a, b)]
`zip` [Int
0..] ]
mk_tv_name :: Int -> String -> Name
mk_tv_name :: Int -> String -> Name
mk_tv_name Int
u String
s = Unique -> OccName -> SrcSpan -> Name
mkInternalName (Int -> Unique
mkAlphaTyVarUnique Int
u)
(FastString -> OccName
mkTyVarOccFS (String -> FastString
mkFastString String
s))
SrcSpan
noSrcSpan
mkTemplateTyVarsFrom :: Int -> [Kind] -> [TyVar]
mkTemplateTyVarsFrom :: Int -> [Type] -> [TyVar]
mkTemplateTyVarsFrom Int
n [Type]
kinds
= [ Name -> Type -> TyVar
mkTyVar Name
name Type
kind
| (Type
kind, Int
index) <- [Type] -> [Int] -> [(Type, Int)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Type]
kinds [Int
0..],
let ch_ord :: Int
ch_ord = Int
index Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Char -> Int
ord Char
'a'
name_str :: String
name_str | Int
ch_ord Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Char -> Int
ord Char
'z' = [Int -> Char
chr Int
ch_ord]
| Bool
otherwise = Char
't'Char -> String -> String
forall a. a -> [a] -> [a]
:Int -> String
forall a. Show a => a -> String
show Int
index
name :: Name
name = Int -> String -> Name
mk_tv_name (Int
index Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
n) String
name_str
]
mkTemplateTyVars :: [Kind] -> [TyVar]
mkTemplateTyVars :: [Type] -> [TyVar]
mkTemplateTyVars = Int -> [Type] -> [TyVar]
mkTemplateTyVarsFrom Int
1
mkTemplateTyConBinders
:: [Kind]
-> ([Kind] -> [Kind])
-> [TyConBinder]
mkTemplateTyConBinders :: [Type] -> ([Type] -> [Type]) -> [TyConBinder]
mkTemplateTyConBinders [Type]
kind_var_kinds [Type] -> [Type]
mk_anon_arg_kinds
= [TyConBinder]
kv_bndrs [TyConBinder] -> [TyConBinder] -> [TyConBinder]
forall a. [a] -> [a] -> [a]
++ [TyConBinder]
tv_bndrs
where
kv_bndrs :: [TyConBinder]
kv_bndrs = [Type] -> [TyConBinder]
mkTemplateKindTyConBinders [Type]
kind_var_kinds
anon_kinds :: [Type]
anon_kinds = [Type] -> [Type]
mk_anon_arg_kinds ([TyVar] -> [Type]
mkTyVarTys ([TyConBinder] -> [TyVar]
forall tv argf. [VarBndr tv argf] -> [tv]
binderVars [TyConBinder]
kv_bndrs))
tv_bndrs :: [TyConBinder]
tv_bndrs = Int -> [Type] -> [TyConBinder]
mkTemplateAnonTyConBindersFrom ([TyConBinder] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [TyConBinder]
kv_bndrs) [Type]
anon_kinds
mkTemplateKiTyVars
:: [Kind]
-> ([Kind] -> [Kind])
-> [TyVar]
mkTemplateKiTyVars :: [Type] -> ([Type] -> [Type]) -> [TyVar]
mkTemplateKiTyVars [Type]
kind_var_kinds [Type] -> [Type]
mk_arg_kinds
= [TyVar]
kv_bndrs [TyVar] -> [TyVar] -> [TyVar]
forall a. [a] -> [a] -> [a]
++ [TyVar]
tv_bndrs
where
kv_bndrs :: [TyVar]
kv_bndrs = [Type] -> [TyVar]
mkTemplateKindVars [Type]
kind_var_kinds
anon_kinds :: [Type]
anon_kinds = [Type] -> [Type]
mk_arg_kinds ([TyVar] -> [Type]
mkTyVarTys [TyVar]
kv_bndrs)
tv_bndrs :: [TyVar]
tv_bndrs = Int -> [Type] -> [TyVar]
mkTemplateTyVarsFrom ([TyVar] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [TyVar]
kv_bndrs) [Type]
anon_kinds
mkTemplateKiTyVar
:: Kind
-> (Kind -> [Kind])
-> [TyVar]
mkTemplateKiTyVar :: Type -> (Type -> [Type]) -> [TyVar]
mkTemplateKiTyVar Type
kind Type -> [Type]
mk_arg_kinds
= TyVar
kv_bndr TyVar -> [TyVar] -> [TyVar]
forall a. a -> [a] -> [a]
: [TyVar]
tv_bndrs
where
kv_bndr :: TyVar
kv_bndr = Type -> TyVar
mkTemplateKindVar Type
kind
anon_kinds :: [Type]
anon_kinds = Type -> [Type]
mk_arg_kinds (TyVar -> Type
mkTyVarTy TyVar
kv_bndr)
tv_bndrs :: [TyVar]
tv_bndrs = Int -> [Type] -> [TyVar]
mkTemplateTyVarsFrom Int
1 [Type]
anon_kinds
mkTemplateKindTyConBinders :: [Kind] -> [TyConBinder]
mkTemplateKindTyConBinders :: [Type] -> [TyConBinder]
mkTemplateKindTyConBinders [Type]
kinds
= [ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Specified TyVar
tv | TyVar
tv <- [Type] -> [TyVar]
mkTemplateKindVars [Type]
kinds]
mkTemplateAnonTyConBinders :: [Kind] -> [TyConBinder]
mkTemplateAnonTyConBinders :: [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [Type]
kinds
= [TyVar] -> [TyConBinder]
mkAnonTyConBinders ([Type] -> [TyVar]
mkTemplateTyVars [Type]
kinds)
mkTemplateAnonTyConBindersFrom :: Int -> [Kind] -> [TyConBinder]
mkTemplateAnonTyConBindersFrom :: Int -> [Type] -> [TyConBinder]
mkTemplateAnonTyConBindersFrom Int
n [Type]
kinds
= [TyVar] -> [TyConBinder]
mkAnonTyConBinders (Int -> [Type] -> [TyVar]
mkTemplateTyVarsFrom Int
n [Type]
kinds)
alphaTyVars :: [TyVar]
alphaTyVars :: [TyVar]
alphaTyVars = [Type] -> [TyVar]
mkTemplateTyVars ([Type] -> [TyVar]) -> [Type] -> [TyVar]
forall a b. (a -> b) -> a -> b
$ Type -> [Type]
forall a. a -> [a]
repeat Type
liftedTypeKind
alphaTyVar, betaTyVar, gammaTyVar, deltaTyVar :: TyVar
(TyVar
alphaTyVar:TyVar
betaTyVar:TyVar
gammaTyVar:TyVar
deltaTyVar:[TyVar]
_) = [TyVar]
alphaTyVars
alphaTyVarSpec, betaTyVarSpec, gammaTyVarSpec, deltaTyVarSpec :: TyVarBinder
(TyVarBinder
alphaTyVarSpec:TyVarBinder
betaTyVarSpec:TyVarBinder
gammaTyVarSpec:TyVarBinder
deltaTyVarSpec:[TyVarBinder]
_) = ForAllTyFlag -> [TyVar] -> [TyVarBinder]
forall vis. vis -> [TyVar] -> [VarBndr TyVar vis]
mkTyVarBinders ForAllTyFlag
Specified [TyVar]
alphaTyVars
alphaConstraintTyVars :: [TyVar]
alphaConstraintTyVars :: [TyVar]
alphaConstraintTyVars = [Type] -> [TyVar]
mkTemplateTyVars ([Type] -> [TyVar]) -> [Type] -> [TyVar]
forall a b. (a -> b) -> a -> b
$ Type -> [Type]
forall a. a -> [a]
repeat Type
constraintKind
alphaConstraintTyVar :: TyVar
(TyVar
alphaConstraintTyVar:[TyVar]
_) = [TyVar]
alphaConstraintTyVars
alphaConstraintTy :: Type
alphaConstraintTy :: Type
alphaConstraintTy = TyVar -> Type
mkTyVarTy TyVar
alphaConstraintTyVar
alphaTys :: [Type]
alphaTys :: [Type]
alphaTys = [TyVar] -> [Type]
mkTyVarTys [TyVar]
alphaTyVars
alphaTy, betaTy, gammaTy, deltaTy :: Type
(Type
alphaTy:Type
betaTy:Type
gammaTy:Type
deltaTy:[Type]
_) = [Type]
alphaTys
alphaTyVarsUnliftedRep :: [TyVar]
alphaTyVarsUnliftedRep :: [TyVar]
alphaTyVarsUnliftedRep = [Type] -> [TyVar]
mkTemplateTyVars ([Type] -> [TyVar]) -> [Type] -> [TyVar]
forall a b. (a -> b) -> a -> b
$ Type -> [Type]
forall a. a -> [a]
repeat Type
unliftedTypeKind
alphaTyVarUnliftedRep :: TyVar
(TyVar
alphaTyVarUnliftedRep:[TyVar]
_) = [TyVar]
alphaTyVarsUnliftedRep
alphaTysUnliftedRep :: [Type]
alphaTysUnliftedRep :: [Type]
alphaTysUnliftedRep = [TyVar] -> [Type]
mkTyVarTys [TyVar]
alphaTyVarsUnliftedRep
alphaTyUnliftedRep :: Type
(Type
alphaTyUnliftedRep:[Type]
_) = [Type]
alphaTysUnliftedRep
runtimeRep1TyVar, runtimeRep2TyVar, runtimeRep3TyVar :: TyVar
(TyVar
runtimeRep1TyVar : TyVar
runtimeRep2TyVar : TyVar
runtimeRep3TyVar : [TyVar]
_)
= Int -> [TyVar] -> [TyVar]
forall a. Int -> [a] -> [a]
drop Int
16 ([Type] -> [TyVar]
mkTemplateTyVars (Type -> [Type]
forall a. a -> [a]
repeat Type
runtimeRepTy))
runtimeRep1TyVarInf, runtimeRep2TyVarInf :: TyVarBinder
runtimeRep1TyVarInf :: TyVarBinder
runtimeRep1TyVarInf = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Inferred TyVar
runtimeRep1TyVar
runtimeRep2TyVarInf :: TyVarBinder
runtimeRep2TyVarInf = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Inferred TyVar
runtimeRep2TyVar
runtimeRep1Ty, runtimeRep2Ty, runtimeRep3Ty :: RuntimeRepType
runtimeRep1Ty :: Type
runtimeRep1Ty = TyVar -> Type
mkTyVarTy TyVar
runtimeRep1TyVar
runtimeRep2Ty :: Type
runtimeRep2Ty = TyVar -> Type
mkTyVarTy TyVar
runtimeRep2TyVar
runtimeRep3Ty :: Type
runtimeRep3Ty = TyVar -> Type
mkTyVarTy TyVar
runtimeRep3TyVar
openAlphaTyVar, openBetaTyVar, openGammaTyVar :: TyVar
[TyVar
openAlphaTyVar,TyVar
openBetaTyVar,TyVar
openGammaTyVar]
= [Type] -> [TyVar]
mkTemplateTyVars [ Type -> Type
mk_TYPE_app Type
runtimeRep1Ty
, Type -> Type
mk_TYPE_app Type
runtimeRep2Ty
, Type -> Type
mk_TYPE_app Type
runtimeRep3Ty]
openAlphaTyVarSpec, openBetaTyVarSpec, openGammaTyVarSpec :: TyVarBinder
openAlphaTyVarSpec :: TyVarBinder
openAlphaTyVarSpec = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Specified TyVar
openAlphaTyVar
openBetaTyVarSpec :: TyVarBinder
openBetaTyVarSpec = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Specified TyVar
openBetaTyVar
openGammaTyVarSpec :: TyVarBinder
openGammaTyVarSpec = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Specified TyVar
openGammaTyVar
openAlphaTy, openBetaTy, openGammaTy :: Type
openAlphaTy :: Type
openAlphaTy = TyVar -> Type
mkTyVarTy TyVar
openAlphaTyVar
openBetaTy :: Type
openBetaTy = TyVar -> Type
mkTyVarTy TyVar
openBetaTyVar
openGammaTy :: Type
openGammaTy = TyVar -> Type
mkTyVarTy TyVar
openGammaTyVar
levity1TyVar, levity2TyVar :: TyVar
(TyVar
levity2TyVar : TyVar
levity1TyVar : [TyVar]
_)
= Int -> [TyVar] -> [TyVar]
forall a. Int -> [a] -> [a]
drop Int
10 ([Type] -> [TyVar]
mkTemplateTyVars (Type -> [Type]
forall a. a -> [a]
repeat Type
levityTy))
levity1TyVarInf, levity2TyVarInf :: TyVarBinder
levity1TyVarInf :: TyVarBinder
levity1TyVarInf = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Inferred TyVar
levity1TyVar
levity2TyVarInf :: TyVarBinder
levity2TyVarInf = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Inferred TyVar
levity2TyVar
levity1Ty, levity2Ty :: Type
levity1Ty :: Type
levity1Ty = TyVar -> Type
mkTyVarTy TyVar
levity1TyVar
levity2Ty :: Type
levity2Ty = TyVar -> Type
mkTyVarTy TyVar
levity2TyVar
levPolyAlphaTyVar, levPolyBetaTyVar :: TyVar
[TyVar
levPolyAlphaTyVar, TyVar
levPolyBetaTyVar] =
[Type] -> [TyVar]
mkTemplateTyVars
[ Type -> Type
mk_TYPE_app (TyCon -> [Type] -> Type
mkTyConApp TyCon
boxedRepDataConTyCon [Type
levity1Ty])
, Type -> Type
mk_TYPE_app (TyCon -> [Type] -> Type
mkTyConApp TyCon
boxedRepDataConTyCon [Type
levity2Ty])]
levPolyAlphaTyVarSpec, levPolyBetaTyVarSpec :: TyVarBinder
levPolyAlphaTyVarSpec :: TyVarBinder
levPolyAlphaTyVarSpec = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Specified TyVar
levPolyAlphaTyVar
levPolyBetaTyVarSpec :: TyVarBinder
levPolyBetaTyVarSpec = ForAllTyFlag -> TyVar -> TyVarBinder
forall vis. vis -> TyVar -> VarBndr TyVar vis
mkTyVarBinder ForAllTyFlag
Specified TyVar
levPolyBetaTyVar
levPolyAlphaTy, levPolyBetaTy :: Type
levPolyAlphaTy :: Type
levPolyAlphaTy = TyVar -> Type
mkTyVarTy TyVar
levPolyAlphaTyVar
levPolyBetaTy :: Type
levPolyBetaTy = TyVar -> Type
mkTyVarTy TyVar
levPolyBetaTyVar
multiplicityTyVar1, multiplicityTyVar2 :: TyVar
(TyVar
multiplicityTyVar1 : TyVar
multiplicityTyVar2 : [TyVar]
_)
= Int -> [TyVar] -> [TyVar]
forall a. Int -> [a] -> [a]
drop Int
13 ([Type] -> [TyVar]
mkTemplateTyVars (Type -> [Type]
forall a. a -> [a]
repeat Type
multiplicityTy))
funTyFlagTyCon :: FunTyFlag -> TyCon
funTyFlagTyCon :: FunTyFlag -> TyCon
funTyFlagTyCon FunTyFlag
FTF_T_T = TyCon
fUNTyCon
funTyFlagTyCon FunTyFlag
FTF_T_C = TyCon
tcArrowTyCon
funTyFlagTyCon FunTyFlag
FTF_C_T = TyCon
ctArrowTyCon
funTyFlagTyCon FunTyFlag
FTF_C_C = TyCon
ccArrowTyCon
isArrowTyCon :: TyCon -> Bool
isArrowTyCon :: TyCon -> Bool
isArrowTyCon TyCon
tc
= Bool -> SDoc -> (TyCon -> Unique) -> TyCon -> Unique
forall a. HasCallStack => Bool -> SDoc -> a -> a
assertPpr (Bool -> Bool
not (TyCon -> Bool
isTypeSynonymTyCon TyCon
tc)) (TyCon -> SDoc
forall a. Outputable a => a -> SDoc
ppr TyCon
tc)
TyCon -> Unique
forall a. Uniquable a => a -> Unique
getUnique TyCon
tc Unique -> [Unique] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem`
[Unique
fUNTyConKey, Unique
ctArrowTyConKey, Unique
ccArrowTyConKey, Unique
tcArrowTyConKey]
fUNTyConName, ctArrowTyConName, ccArrowTyConName, tcArrowTyConName :: Name
fUNTyConName :: Name
fUNTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"FUN") Unique
fUNTyConKey TyCon
fUNTyCon
ctArrowTyConName :: Name
ctArrowTyConName = FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc (String -> FastString
fsLit String
"=>") Unique
ctArrowTyConKey TyCon
ctArrowTyCon
ccArrowTyConName :: Name
ccArrowTyConName = FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc (String -> FastString
fsLit String
"==>") Unique
ccArrowTyConKey TyCon
ccArrowTyCon
tcArrowTyConName :: Name
tcArrowTyConName = FastString -> Unique -> TyCon -> Name
mkBuiltInPrimTc (String -> FastString
fsLit String
"-=>") Unique
tcArrowTyConKey TyCon
tcArrowTyCon
fUNTyCon :: TyCon
fUNTyCon :: TyCon
fUNTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
fUNTyConName [TyConBinder]
tc_bndrs Type
liftedTypeKind [Role]
tc_roles
where
tc_bndrs :: [TyConBinder]
tc_bndrs = [ ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Required TyVar
multiplicityTyVar1
, ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep1TyVar
, ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep2TyVar ]
[TyConBinder] -> [TyConBinder] -> [TyConBinder]
forall a. [a] -> [a] -> [a]
++ [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [ Type -> Type
mk_TYPE_app Type
runtimeRep1Ty
, Type -> Type
mk_TYPE_app Type
runtimeRep2Ty ]
tc_roles :: [Role]
tc_roles = [Role
Nominal, Role
Nominal, Role
Nominal, Role
Representational, Role
Representational]
ctArrowTyCon :: TyCon
ctArrowTyCon :: TyCon
ctArrowTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
ctArrowTyConName [TyConBinder]
tc_bndrs Type
liftedTypeKind [Role]
tc_roles
where
tc_bndrs :: [TyConBinder]
tc_bndrs = [ ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep1TyVar
, ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep2TyVar ]
[TyConBinder] -> [TyConBinder] -> [TyConBinder]
forall a. [a] -> [a] -> [a]
++ [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [ Type -> Type
mk_CONSTRAINT_app Type
runtimeRep1Ty
, Type -> Type
mk_TYPE_app Type
runtimeRep2Ty ]
tc_roles :: [Role]
tc_roles = [Role
Nominal, Role
Nominal, Role
Representational, Role
Representational]
ccArrowTyCon :: TyCon
ccArrowTyCon :: TyCon
ccArrowTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
ccArrowTyConName [TyConBinder]
tc_bndrs Type
constraintKind [Role]
tc_roles
where
tc_bndrs :: [TyConBinder]
tc_bndrs = [ ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep1TyVar
, ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep2TyVar ]
[TyConBinder] -> [TyConBinder] -> [TyConBinder]
forall a. [a] -> [a] -> [a]
++ [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [ Type -> Type
mk_CONSTRAINT_app Type
runtimeRep1Ty
, Type -> Type
mk_CONSTRAINT_app Type
runtimeRep2Ty ]
tc_roles :: [Role]
tc_roles = [Role
Nominal, Role
Nominal, Role
Representational, Role
Representational]
tcArrowTyCon :: TyCon
tcArrowTyCon :: TyCon
tcArrowTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
tcArrowTyConName [TyConBinder]
tc_bndrs Type
constraintKind [Role]
tc_roles
where
tc_bndrs :: [TyConBinder]
tc_bndrs = [ ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep1TyVar
, ForAllTyFlag -> TyVar -> TyConBinder
mkNamedTyConBinder ForAllTyFlag
Inferred TyVar
runtimeRep2TyVar ]
[TyConBinder] -> [TyConBinder] -> [TyConBinder]
forall a. [a] -> [a] -> [a]
++ [Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [ Type -> Type
mk_TYPE_app Type
runtimeRep1Ty
, Type -> Type
mk_CONSTRAINT_app Type
runtimeRep2Ty ]
tc_roles :: [Role]
tc_roles = [Role
Nominal, Role
Nominal, Role
Representational, Role
Representational]
tYPETyCon :: TyCon
tYPETyCon :: TyCon
tYPETyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
tYPETyConName
([Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [Type
runtimeRepTy])
Type
liftedTypeKind
[Role
Nominal]
tYPETyConName :: Name
tYPETyConName :: Name
tYPETyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"TYPE") Unique
tYPETyConKey TyCon
tYPETyCon
tYPEKind :: Type
tYPEKind :: Type
tYPEKind = TyCon -> Type
mkTyConTy TyCon
tYPETyCon
cONSTRAINTTyCon :: TyCon
cONSTRAINTTyCon :: TyCon
cONSTRAINTTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
cONSTRAINTTyConName
([Type] -> [TyConBinder]
mkTemplateAnonTyConBinders [Type
runtimeRepTy])
Type
liftedTypeKind
[Role
Nominal]
cONSTRAINTTyConName :: Name
cONSTRAINTTyConName :: Name
cONSTRAINTTyConName = FastString -> Unique -> TyCon -> Name
mkPrimTc (String -> FastString
fsLit String
"CONSTRAINT") Unique
cONSTRAINTTyConKey TyCon
cONSTRAINTTyCon
cONSTRAINTKind :: Type
cONSTRAINTKind :: Type
cONSTRAINTKind = TyCon -> Type
mkTyConTy TyCon
cONSTRAINTTyCon
charPrimTy :: Type
charPrimTy :: Type
charPrimTy = TyCon -> Type
mkTyConTy TyCon
charPrimTyCon
charPrimTyCon :: TyCon
charPrimTyCon :: TyCon
charPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
charPrimTyConName Type
wordRepDataConTy
intPrimTy :: Type
intPrimTy :: Type
intPrimTy = TyCon -> Type
mkTyConTy TyCon
intPrimTyCon
intPrimTyCon :: TyCon
intPrimTyCon :: TyCon
intPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
intPrimTyConName Type
intRepDataConTy
int8PrimTy :: Type
int8PrimTy :: Type
int8PrimTy = TyCon -> Type
mkTyConTy TyCon
int8PrimTyCon
int8PrimTyCon :: TyCon
int8PrimTyCon :: TyCon
int8PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
int8PrimTyConName Type
int8RepDataConTy
int16PrimTy :: Type
int16PrimTy :: Type
int16PrimTy = TyCon -> Type
mkTyConTy TyCon
int16PrimTyCon
int16PrimTyCon :: TyCon
int16PrimTyCon :: TyCon
int16PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
int16PrimTyConName Type
int16RepDataConTy
int32PrimTy :: Type
int32PrimTy :: Type
int32PrimTy = TyCon -> Type
mkTyConTy TyCon
int32PrimTyCon
int32PrimTyCon :: TyCon
int32PrimTyCon :: TyCon
int32PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
int32PrimTyConName Type
int32RepDataConTy
int64PrimTy :: Type
int64PrimTy :: Type
int64PrimTy = TyCon -> Type
mkTyConTy TyCon
int64PrimTyCon
int64PrimTyCon :: TyCon
int64PrimTyCon :: TyCon
int64PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
int64PrimTyConName Type
int64RepDataConTy
wordPrimTy :: Type
wordPrimTy :: Type
wordPrimTy = TyCon -> Type
mkTyConTy TyCon
wordPrimTyCon
wordPrimTyCon :: TyCon
wordPrimTyCon :: TyCon
wordPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
wordPrimTyConName Type
wordRepDataConTy
word8PrimTy :: Type
word8PrimTy :: Type
word8PrimTy = TyCon -> Type
mkTyConTy TyCon
word8PrimTyCon
word8PrimTyCon :: TyCon
word8PrimTyCon :: TyCon
word8PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
word8PrimTyConName Type
word8RepDataConTy
word16PrimTy :: Type
word16PrimTy :: Type
word16PrimTy = TyCon -> Type
mkTyConTy TyCon
word16PrimTyCon
word16PrimTyCon :: TyCon
word16PrimTyCon :: TyCon
word16PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
word16PrimTyConName Type
word16RepDataConTy
word32PrimTy :: Type
word32PrimTy :: Type
word32PrimTy = TyCon -> Type
mkTyConTy TyCon
word32PrimTyCon
word32PrimTyCon :: TyCon
word32PrimTyCon :: TyCon
word32PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
word32PrimTyConName Type
word32RepDataConTy
word64PrimTy :: Type
word64PrimTy :: Type
word64PrimTy = TyCon -> Type
mkTyConTy TyCon
word64PrimTyCon
word64PrimTyCon :: TyCon
word64PrimTyCon :: TyCon
word64PrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
word64PrimTyConName Type
word64RepDataConTy
addrPrimTy :: Type
addrPrimTy :: Type
addrPrimTy = TyCon -> Type
mkTyConTy TyCon
addrPrimTyCon
addrPrimTyCon :: TyCon
addrPrimTyCon :: TyCon
addrPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
addrPrimTyConName Type
addrRepDataConTy
floatPrimTy :: Type
floatPrimTy :: Type
floatPrimTy = TyCon -> Type
mkTyConTy TyCon
floatPrimTyCon
floatPrimTyCon :: TyCon
floatPrimTyCon :: TyCon
floatPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
floatPrimTyConName Type
floatRepDataConTy
doublePrimTy :: Type
doublePrimTy :: Type
doublePrimTy = TyCon -> Type
mkTyConTy TyCon
doublePrimTyCon
doublePrimTyCon :: TyCon
doublePrimTyCon :: TyCon
doublePrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
doublePrimTyConName Type
doubleRepDataConTy
mkStatePrimTy :: Type -> Type
mkStatePrimTy :: Type -> Type
mkStatePrimTy Type
ty = TyCon -> [Type] -> Type
TyConApp TyCon
statePrimTyCon [Type
ty]
statePrimTyCon :: TyCon
statePrimTyCon :: TyCon
statePrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon Name
statePrimTyConName [Role
Nominal] Type
zeroBitRepTy
realWorldTyCon :: TyCon
realWorldTyCon :: TyCon
realWorldTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
realWorldTyConName [] Type
liftedTypeKind []
realWorldTy :: Type
realWorldTy :: Type
realWorldTy = TyCon -> Type
mkTyConTy TyCon
realWorldTyCon
realWorldStatePrimTy :: Type
realWorldStatePrimTy :: Type
realWorldStatePrimTy = Type -> Type
mkStatePrimTy Type
realWorldTy
realWorldMutableByteArrayPrimTy :: Type
realWorldMutableByteArrayPrimTy :: Type
realWorldMutableByteArrayPrimTy
= Type -> Type
mkMutableByteArrayPrimTy Type
realWorldTy
mkProxyPrimTy :: Type -> Type -> Type
mkProxyPrimTy :: Type -> Type -> Type
mkProxyPrimTy Type
k Type
ty = TyCon -> [Type] -> Type
TyConApp TyCon
proxyPrimTyCon [Type
k, Type
ty]
proxyPrimTyCon :: TyCon
proxyPrimTyCon :: TyCon
proxyPrimTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
proxyPrimTyConName [TyConBinder]
binders Type
res_kind [Role
Nominal,Role
Phantom]
where
binders :: [TyConBinder]
binders = [Type] -> ([Type] -> [Type]) -> [TyConBinder]
mkTemplateTyConBinders [Type
liftedTypeKind] [Type] -> [Type]
forall a. a -> a
id
res_kind :: Type
res_kind = [Type] -> Type
unboxedTupleKind []
eqPrimTyCon :: TyCon
eqPrimTyCon :: TyCon
eqPrimTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
eqPrimTyConName [TyConBinder]
binders Type
res_kind [Role]
roles
where
binders :: [TyConBinder]
binders = [Type] -> ([Type] -> [Type]) -> [TyConBinder]
mkTemplateTyConBinders [Type
liftedTypeKind, Type
liftedTypeKind] [Type] -> [Type]
forall a. a -> a
id
res_kind :: Type
res_kind = TyCon -> [Type] -> Type
TyConApp TyCon
cONSTRAINTTyCon [Type
zeroBitRepTy]
roles :: [Role]
roles = [Role
Nominal, Role
Nominal, Role
Nominal, Role
Nominal]
eqReprPrimTyCon :: TyCon
eqReprPrimTyCon :: TyCon
eqReprPrimTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
eqReprPrimTyConName [TyConBinder]
binders Type
res_kind [Role]
roles
where
binders :: [TyConBinder]
binders = [Type] -> ([Type] -> [Type]) -> [TyConBinder]
mkTemplateTyConBinders [Type
liftedTypeKind, Type
liftedTypeKind] [Type] -> [Type]
forall a. a -> a
id
res_kind :: Type
res_kind = TyCon -> [Type] -> Type
TyConApp TyCon
cONSTRAINTTyCon [Type
zeroBitRepTy]
roles :: [Role]
roles = [Role
Nominal, Role
Nominal, Role
Representational, Role
Representational]
eqPhantPrimTyCon :: TyCon
eqPhantPrimTyCon :: TyCon
eqPhantPrimTyCon = Name -> [TyConBinder] -> Type -> [Role] -> TyCon
mkPrimTyCon Name
eqPhantPrimTyConName [TyConBinder]
binders Type
res_kind [Role]
roles
where
binders :: [TyConBinder]
binders = [Type] -> ([Type] -> [Type]) -> [TyConBinder]
mkTemplateTyConBinders [Type
liftedTypeKind, Type
liftedTypeKind] [Type] -> [Type]
forall a. a -> a
id
res_kind :: Type
res_kind = TyCon -> [Type] -> Type
TyConApp TyCon
cONSTRAINTTyCon [Type
zeroBitRepTy]
roles :: [Role]
roles = [Role
Nominal, Role
Nominal, Role
Phantom, Role
Phantom]
equalityTyCon :: Role -> TyCon
equalityTyCon :: Role -> TyCon
equalityTyCon Role
Nominal = TyCon
eqPrimTyCon
equalityTyCon Role
Representational = TyCon
eqReprPrimTyCon
equalityTyCon Role
Phantom = TyCon
eqPhantPrimTyCon
arrayPrimTyCon, mutableArrayPrimTyCon, mutableByteArrayPrimTyCon,
byteArrayPrimTyCon,
smallArrayPrimTyCon, smallMutableArrayPrimTyCon :: TyCon
arrayPrimTyCon :: TyCon
arrayPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
arrayPrimTyConName [Role
Representational] Type
unliftedRepTy
mutableArrayPrimTyCon :: TyCon
mutableArrayPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
mutableArrayPrimTyConName [Role
Nominal, Role
Representational] Type
unliftedRepTy
mutableByteArrayPrimTyCon :: TyCon
mutableByteArrayPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon Name
mutableByteArrayPrimTyConName [Role
Nominal] Type
unliftedRepTy
byteArrayPrimTyCon :: TyCon
byteArrayPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
byteArrayPrimTyConName Type
unliftedRepTy
smallArrayPrimTyCon :: TyCon
smallArrayPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
smallArrayPrimTyConName [Role
Representational] Type
unliftedRepTy
smallMutableArrayPrimTyCon :: TyCon
smallMutableArrayPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
smallMutableArrayPrimTyConName [Role
Nominal, Role
Representational] Type
unliftedRepTy
mkArrayPrimTy :: Type -> Type
mkArrayPrimTy :: Type -> Type
mkArrayPrimTy Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
arrayPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
elt]
byteArrayPrimTy :: Type
byteArrayPrimTy :: Type
byteArrayPrimTy = TyCon -> Type
mkTyConTy TyCon
byteArrayPrimTyCon
mkSmallArrayPrimTy :: Type -> Type
mkSmallArrayPrimTy :: Type -> Type
mkSmallArrayPrimTy Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
smallArrayPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
elt]
mkMutableArrayPrimTy :: Type -> Type -> Type
mkMutableArrayPrimTy :: Type -> Type -> Type
mkMutableArrayPrimTy Type
s Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
mutableArrayPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
s, Type
elt]
mkMutableByteArrayPrimTy :: Type -> Type
mkMutableByteArrayPrimTy :: Type -> Type
mkMutableByteArrayPrimTy Type
s = TyCon -> [Type] -> Type
TyConApp TyCon
mutableByteArrayPrimTyCon [Type
s]
mkSmallMutableArrayPrimTy :: Type -> Type -> Type
mkSmallMutableArrayPrimTy :: Type -> Type -> Type
mkSmallMutableArrayPrimTy Type
s Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
smallMutableArrayPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
s, Type
elt]
mutVarPrimTyCon :: TyCon
mutVarPrimTyCon :: TyCon
mutVarPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
mutVarPrimTyConName [Role
Nominal, Role
Representational] Type
unliftedRepTy
mkMutVarPrimTy :: Type -> Type -> Type
mkMutVarPrimTy :: Type -> Type -> Type
mkMutVarPrimTy Type
s Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
mutVarPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
s, Type
elt]
ioPortPrimTyCon :: TyCon
ioPortPrimTyCon :: TyCon
ioPortPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
ioPortPrimTyConName [Role
Nominal, Role
Representational] Type
unliftedRepTy
mkIOPortPrimTy :: Type -> Type -> Type
mkIOPortPrimTy :: Type -> Type -> Type
mkIOPortPrimTy Type
s Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
ioPortPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
s, Type
elt]
mVarPrimTyCon :: TyCon
mVarPrimTyCon :: TyCon
mVarPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
mVarPrimTyConName [Role
Nominal, Role
Representational] Type
unliftedRepTy
mkMVarPrimTy :: Type -> Type -> Type
mkMVarPrimTy :: Type -> Type -> Type
mkMVarPrimTy Type
s Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
mVarPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
s, Type
elt]
tVarPrimTyCon :: TyCon
tVarPrimTyCon :: TyCon
tVarPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
tVarPrimTyConName [Role
Nominal, Role
Representational] Type
unliftedRepTy
mkTVarPrimTy :: Type -> Type -> Type
mkTVarPrimTy :: Type -> Type -> Type
mkTVarPrimTy Type
s Type
elt = TyCon -> [Type] -> Type
TyConApp TyCon
tVarPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
elt, Type
s, Type
elt]
stablePtrPrimTyCon :: TyCon
stablePtrPrimTyCon :: TyCon
stablePtrPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
stablePtrPrimTyConName [Role
Representational] Type
addrRepDataConTy
mkStablePtrPrimTy :: Type -> Type
mkStablePtrPrimTy :: Type -> Type
mkStablePtrPrimTy Type
ty = TyCon -> [Type] -> Type
TyConApp TyCon
stablePtrPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
ty, Type
ty]
stableNamePrimTyCon :: TyCon
stableNamePrimTyCon :: TyCon
stableNamePrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
stableNamePrimTyConName [Role
Phantom] Type
unliftedRepTy
mkStableNamePrimTy :: Type -> Type
mkStableNamePrimTy :: Type -> Type
mkStableNamePrimTy Type
ty = TyCon -> [Type] -> Type
TyConApp TyCon
stableNamePrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
ty, Type
ty]
compactPrimTyCon :: TyCon
compactPrimTyCon :: TyCon
compactPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
compactPrimTyConName Type
unliftedRepTy
compactPrimTy :: Type
compactPrimTy :: Type
compactPrimTy = TyCon -> Type
mkTyConTy TyCon
compactPrimTyCon
stackSnapshotPrimTyCon :: TyCon
stackSnapshotPrimTyCon :: TyCon
stackSnapshotPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
stackSnapshotPrimTyConName Type
unliftedRepTy
stackSnapshotPrimTy :: Type
stackSnapshotPrimTy :: Type
stackSnapshotPrimTy = TyCon -> Type
mkTyConTy TyCon
stackSnapshotPrimTyCon
bcoPrimTy :: Type
bcoPrimTy :: Type
bcoPrimTy = TyCon -> Type
mkTyConTy TyCon
bcoPrimTyCon
bcoPrimTyCon :: TyCon
bcoPrimTyCon :: TyCon
bcoPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
bcoPrimTyConName Type
liftedRepTy
weakPrimTyCon :: TyCon
weakPrimTyCon :: TyCon
weakPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon_LevPolyLastArg Name
weakPrimTyConName [Role
Representational] Type
unliftedRepTy
mkWeakPrimTy :: Type -> Type
mkWeakPrimTy :: Type -> Type
mkWeakPrimTy Type
v = TyCon -> [Type] -> Type
TyConApp TyCon
weakPrimTyCon [HasDebugCallStack => Type -> Type
Type -> Type
getLevity Type
v, Type
v]
threadIdPrimTy :: Type
threadIdPrimTy :: Type
threadIdPrimTy = TyCon -> Type
mkTyConTy TyCon
threadIdPrimTyCon
threadIdPrimTyCon :: TyCon
threadIdPrimTyCon :: TyCon
threadIdPrimTyCon = Name -> Type -> TyCon
pcPrimTyCon0 Name
threadIdPrimTyConName Type
unliftedRepTy
promptTagPrimTyCon :: TyCon
promptTagPrimTyCon :: TyCon
promptTagPrimTyCon = Name -> [Role] -> Type -> TyCon
pcPrimTyCon Name
promptTagPrimTyConName [Role
Representational] Type
unliftedRepTy
mkPromptTagPrimTy :: Type -> Type
mkPromptTagPrimTy :: Type -> Type
mkPromptTagPrimTy Type
v = TyCon -> [Type] -> Type
TyConApp TyCon
promptTagPrimTyCon [Type
v]
#include "primop-vector-tys.hs-incl"