module CLaSH.Core.TysPrim
( liftedTypeKind
, typeNatKind
, typeSymbolKind
, intPrimTy
, voidPrimTy
, tysPrimMap
)
where
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
import Unbound.LocallyNameless (string2Name)
import CLaSH.Core.TyCon
import CLaSH.Core.Type
tySuperKindTyConName, liftedTypeKindTyConName, typeNatKindTyConName, typeSymbolKindTyConName :: TyConName
tySuperKindTyConName = string2Name "BOX"
liftedTypeKindTyConName = string2Name "*"
typeNatKindTyConName = string2Name "Nat"
typeSymbolKindTyConName = string2Name "Symbol"
liftedTypeKindtc, tySuperKindtc, typeNatKindtc, typeSymbolKindtc :: TyCon
tySuperKindtc = SuperKindTyCon tySuperKindTyConName
liftedTypeKindtc = mkKindTyCon liftedTypeKindTyConName tySuperKind
typeNatKindtc = mkKindTyCon typeNatKindTyConName tySuperKind
typeSymbolKindtc = mkKindTyCon typeSymbolKindTyConName tySuperKind
liftedTypeKind, tySuperKind, typeNatKind, typeSymbolKind :: Type
tySuperKind = mkTyConTy tySuperKindTyConName
liftedTypeKind = mkTyConTy liftedTypeKindTyConName
typeNatKind = mkTyConTy typeNatKindTyConName
typeSymbolKind = mkTyConTy typeSymbolKindTyConName
intPrimTyConName, voidPrimTyConName :: TyConName
intPrimTyConName = string2Name "Int"
voidPrimTyConName = string2Name "VOID"
liftedPrimTC ::
TyConName
-> PrimRep
-> TyCon
liftedPrimTC name = PrimTyCon name liftedTypeKind 0
intPrimTc, voidPrimTc :: TyCon
intPrimTc = (liftedPrimTC intPrimTyConName IntRep )
voidPrimTc = (liftedPrimTC voidPrimTyConName VoidRep)
intPrimTy, voidPrimTy :: Type
intPrimTy = mkTyConTy intPrimTyConName
voidPrimTy = mkTyConTy voidPrimTyConName
tysPrimMap :: HashMap TyConName TyCon
tysPrimMap = HashMap.fromList
[ (tySuperKindTyConName,tySuperKindtc)
, (liftedTypeKindTyConName,liftedTypeKindtc)
, (typeNatKindTyConName,typeNatKindtc)
, (typeSymbolKindTyConName,typeSymbolKindtc)
, (intPrimTyConName,intPrimTc)
, (voidPrimTyConName,voidPrimTc)
]