packages feed

ddc-source-tetra-0.4.3.1: DDC/Source/Tetra/Convert/Prim.hs

module DDC.Source.Tetra.Convert.Prim
        ( toCoreTyConTetra
        , toCorePrimVal
        , toCorePrimLit)
where
import qualified DDC.Core.Tetra.Prim    as C
import qualified DDC.Source.Tetra.Prim  as S


-- | Convert a Tetra specific type constructor to core.
toCoreTyConTetra :: S.PrimTyConTetra -> C.TyConTetra
toCoreTyConTetra tc
 = case tc of
        S.PrimTyConTetraTuple n -> C.TyConTetraTuple n
        S.PrimTyConTetraVector  -> C.TyConTetraVector
        S.PrimTyConTetraF       -> C.TyConTetraF
        S.PrimTyConTetraC       -> C.TyConTetraC
        S.PrimTyConTetraU       -> C.TyConTetraU


-- | Convert a value primtivie to a core name.
toCorePrimVal :: S.PrimVal -> C.Name
toCorePrimVal pv
 = case pv of
        S.PrimValArith  p       -> C.NamePrimArith  p False
        S.PrimValCast   p       -> C.NamePrimCast   p False
        S.PrimValError  p       -> C.NameOpError    p False
        S.PrimValVector p       -> C.NameOpVector   p False
        S.PrimValFun    p       -> C.NameOpFun      p
        S.PrimValLit    p       -> toCorePrimLit    p


-- | Convert a primitive literal to a core name.
toCorePrimLit :: S.PrimLit -> C.Name
toCorePrimLit pl
 = case pl of       
        S.PrimLitBool    x      -> C.NameLitBool    x
        S.PrimLitNat     x      -> C.NameLitNat     x
        S.PrimLitInt     x      -> C.NameLitInt     x
        S.PrimLitSize    x      -> C.NameLitSize    x
        S.PrimLitWord    x s    -> C.NameLitWord    x s
        S.PrimLitFloat   x s    -> C.NameLitFloat   x s
        S.PrimLitChar    x      -> C.NameLitChar    x
        S.PrimLitTextLit x      -> C.NameLitTextLit x