module DDC.Source.Tetra.Prim.OpArith
(typePrimArith)
where
import DDC.Source.Tetra.Prim.TyConPrim
import DDC.Source.Tetra.Prim.Base
import DDC.Type.Compounds
import DDC.Type.Exp
typePrimArith :: PrimArith -> Type Name
typePrimArith op
= case op of
PrimArithNeg -> tForall kData $ \t -> t `tFun` t
PrimArithAdd -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithSub -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithMul -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithDiv -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithMod -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithRem -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithEq -> tForall kData $ \t -> t `tFun` t `tFun` tBool
PrimArithNeq -> tForall kData $ \t -> t `tFun` t `tFun` tBool
PrimArithGt -> tForall kData $ \t -> t `tFun` t `tFun` tBool
PrimArithLt -> tForall kData $ \t -> t `tFun` t `tFun` tBool
PrimArithLe -> tForall kData $ \t -> t `tFun` t `tFun` tBool
PrimArithGe -> tForall kData $ \t -> t `tFun` t `tFun` tBool
PrimArithAnd -> tBool `tFun` tBool `tFun` tBool
PrimArithOr -> tBool `tFun` tBool `tFun` tBool
PrimArithShl -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithShr -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithBAnd -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithBOr -> tForall kData $ \t -> t `tFun` t `tFun` t
PrimArithBXOr -> tForall kData $ \t -> t `tFun` t `tFun` t