module DDC.Core.Tetra.Prim.OpCast
        ( readPrimCast
        , typePrimCast)
where
import DDC.Core.Tetra.Prim.Base
import DDC.Type.Compounds
import DDC.Type.Exp
import DDC.Core.Salt.Name       (readPrimCast)


-- | Take the type of a primitive numeric cast operator.
typePrimCast :: PrimCast -> Type Name
typePrimCast op
 = case op of
        PrimCastConvert  
         -> tForalls [kData, kData] $ \[t1, t2] -> t1 `tFun` t2

        PrimCastPromote  
         -> tForalls [kData, kData] $ \[t1, t2] -> t1 `tFun` t2

        PrimCastTruncate 
         -> tForalls [kData, kData] $ \[t1, t2] -> t1 `tFun` t2