diff --git a/src/runtime/haskell/PGF.hs b/src/runtime/haskell/PGF.hs index 652399f69..9bdfd8b23 100644 --- a/src/runtime/haskell/PGF.hs +++ b/src/runtime/haskell/PGF.hs @@ -43,6 +43,7 @@ module PGF( -- ** Expr Expr, showExpr, readExpr, + mkAbs, unAbs, mkApp, unApp, mkStr, unStr, mkInt, unInt, diff --git a/src/runtime/haskell/PGF/Expr.hs b/src/runtime/haskell/PGF/Expr.hs index 2202a20c4..554726815 100644 --- a/src/runtime/haskell/PGF/Expr.hs +++ b/src/runtime/haskell/PGF/Expr.hs @@ -1,6 +1,7 @@ module PGF.Expr(Tree, BindType(..), Expr(..), Literal(..), Patt(..), Equation(..), readExpr, showExpr, pExpr, pBinds, ppExpr, ppPatt, pattScope, + mkAbs, unAbs, mkApp, unApp, mkStr, unStr, mkInt, unInt, @@ -96,6 +97,15 @@ showExpr vars = PP.render . ppExpr 0 vars instance Read Expr where readsPrec _ = RP.readP_to_S pExpr +mkAbs :: BindType -> CId -> Expr -> Expr +mkAbs = EAbs + +unAbs :: Expr -> Maybe (BindType, CId, Expr) +unAbs (EAbs bt x e) = Just (bt,x,e) +unAbs (ETyped e ty) = unAbs e +unAbs (EImplArg e) = unAbs e +unAbs _ = Nothing + -- | Constructs an expression by applying a function to a list of expressions mkApp :: CId -> [Expr] -> Expr mkApp f es = foldl EApp (EFun f) es