packages feed

g2-0.1.0.0: src/G2/Language/Monad/Primitives.hs

module G2.Language.Monad.Primitives ( mkGeE
                                              , mkGtE
                                              , mkEqE
                                              , mkNeqE
                                              , mkLtE
                                              , mkLeE
                                              , mkAndE
                                              , mkOrE
                                              , mkNotE
                                              , mkPlusE
                                              , mkMinusE
                                              , mkMultE
                                              , mkDivE
                                              , mkModE
                                              , mkNegateE
                                              , mkImpliesE
                                              , mkIffE
                                              , mkFromIntegerE
                                              , mkToIntegerE
                                              , mkEqPrimIntE
                                              , mkEqPrimFloatE
                                              , mkEqPrimDoubleE
                                              , mkEqPrimCharE ) where

import G2.Language.Primitives
import G2.Language.Syntax
import G2.Language.Support

import G2.Language.Monad.Support

appExpr :: ExState s m => (ExprEnv -> Expr) -> m Expr
appExpr f = return . f =<< exprEnv

mkGeE :: ExState s m => m Expr
mkGeE = appExpr mkGe

mkGtE :: ExState s m => m Expr
mkGtE = appExpr mkGt

mkEqE :: ExState s m => m Expr
mkEqE = appExpr mkEq

mkNeqE :: ExState s m => m Expr
mkNeqE = appExpr mkNeq

mkLtE :: ExState s m => m Expr
mkLtE = appExpr mkLt

mkLeE :: ExState s m => m Expr
mkLeE = appExpr mkLe

mkAndE :: ExState s m => m Expr
mkAndE = appExpr mkAnd

mkOrE :: ExState s m => m Expr
mkOrE = appExpr mkOr

mkNotE :: ExState s m => m Expr
mkNotE = appExpr mkNot

mkPlusE :: ExState s m => m Expr
mkPlusE = appExpr mkPlus

mkMinusE :: ExState s m => m Expr
mkMinusE = appExpr mkMinus

mkMultE :: ExState s m => m Expr
mkMultE = appExpr mkMult

mkDivE :: ExState s m => m Expr
mkDivE = appExpr mkDiv

mkModE :: ExState s m => m Expr
mkModE = appExpr mkMod

mkNegateE :: ExState s m => m Expr
mkNegateE = appExpr mkNegate

mkImpliesE :: ExState s m => m Expr
mkImpliesE = appExpr mkImplies

mkIffE :: ExState s m => m Expr
mkIffE = appExpr mkIff

mkFromIntegerE :: ExState s m => m Expr
mkFromIntegerE = appExpr mkFromInteger

mkToIntegerE :: ExState s m => m Expr
mkToIntegerE = appExpr mkToInteger

appKV :: ExState s m => (KnownValues -> Expr) -> m Expr
appKV f = return . f =<< knownValues

mkEqPrimIntE :: ExState s m => m Expr
mkEqPrimIntE = appKV mkEqPrimInt

mkEqPrimFloatE :: ExState s m => m Expr
mkEqPrimFloatE = appKV mkEqPrimFloat

mkEqPrimDoubleE :: ExState s m => m Expr
mkEqPrimDoubleE = appKV mkEqPrimDouble

mkEqPrimCharE :: ExState s m => m Expr
mkEqPrimCharE = appKV mkEqPrimChar