-- | Definitions of primitive types for Source Tetra language. module DDC.Source.Tetra.Prim.TyConPrim ( kindPrimTyCon , tVoid, tBool, tNat, tInt, tSize, tWord, tFloat , tTextLit) where import DDC.Source.Tetra.Prim.Base import DDC.Type.Compounds import DDC.Type.Exp -- | Yield the kind of a type constructor. kindPrimTyCon :: PrimTyCon -> Kind Name kindPrimTyCon tc = case tc of PrimTyConVoid -> kData PrimTyConBool -> kData PrimTyConNat -> kData PrimTyConInt -> kData PrimTyConSize -> kData PrimTyConWord _ -> kData PrimTyConFloat _ -> kData PrimTyConVec _ -> kData `kFun` kData PrimTyConAddr -> kData PrimTyConPtr -> kRegion `kFun` kData `kFun` kData PrimTyConTextLit -> kData PrimTyConTag -> kData -- Compounds ------------------------------------------------------------------ -- | Primitive `Void` type. tVoid :: Type Name tVoid = TCon (TyConBound (UPrim (NameTyCon PrimTyConVoid) kData) kData) -- | Primitive `Bool` type. tBool :: Type Name tBool = TCon (TyConBound (UPrim (NameTyCon PrimTyConBool) kData) kData) -- | Primitive `Nat` type. tNat :: Type Name tNat = TCon (TyConBound (UPrim (NameTyCon PrimTyConNat) kData) kData) -- | Primitive `Int` type. tInt :: Type Name tInt = TCon (TyConBound (UPrim (NameTyCon PrimTyConInt) kData) kData) -- | Primitive `Size` type. tSize :: Type Name tSize = TCon (TyConBound (UPrim (NameTyCon PrimTyConSize) kData) kData) -- | Primitive `WordN` type of the given width. tWord :: Int -> Type Name tWord bits = TCon (TyConBound (UPrim (NameTyCon (PrimTyConWord bits)) kData) kData) -- | Primitive `FloatN` type of the given width. tFloat :: Int -> Type Name tFloat bits = TCon (TyConBound (UPrim (NameTyCon (PrimTyConFloat bits)) kData) kData) -- | Primitive `TextLit` type. tTextLit :: Type Name tTextLit = TCon (TyConBound (UPrim (NameTyCon PrimTyConTextLit) kData) kData)