module DDC.Core.Salt.Compounds.PrimControl
( xFail
, xReturn
, typeOfPrimControl)
where
import DDC.Core.Salt.Name
import DDC.Core.Exp.Annot
xPrimControl a p
= XVar a (UPrim (NamePrimOp $ PrimControl p) (typeOfPrimControl p))
xFail :: a -> Type Name -> Exp a Name
xFail a t
= xApps a (xPrimControl a PrimControlFail)
[XType a t]
xReturn :: a -> Type Name -> Exp a Name -> Exp a Name
xReturn a t x
= xApps a (xPrimControl a PrimControlReturn)
[XType a t, x]
typeOfPrimControl :: PrimControl -> Type Name
typeOfPrimControl pc
= case pc of
PrimControlFail -> tForall kData $ \t -> t
PrimControlReturn -> tForall kData $ \t -> t `tFun` t