added exprSize and exprFunctions in the Haskell runtime too and use them in TreeOperations

This commit is contained in:
Krasimir Angelov
2017-09-05 10:16:48 +02:00
parent 5ed0e3ae7f
commit 13d8045814
2 changed files with 21 additions and 15 deletions

View File

@@ -54,7 +54,7 @@ module PGF(
mkFloat, unFloat,
mkMeta, unMeta,
-- extra
pExpr,
pExpr, exprSize, exprFunctions,
-- * Operations
-- ** Linearization
@@ -314,6 +314,23 @@ functionType pgf fun =
compute :: PGF -> Expr -> Expr
compute pgf = PGF.Data.normalForm (funs (abstract pgf),const Nothing) 0 []
exprSize :: Expr -> Int
exprSize (EAbs _ _ e) = exprSize e
exprSize (EApp e1 e2) = exprSize e1 + exprSize e2
exprSize (ETyped e ty)= exprSize e
exprSize (EImplArg e) = exprSize e
exprSize _ = 1
exprFunctions :: Expr -> [CId]
exprFunctions (EAbs _ _ e) = exprFunctions e
exprFunctions (EApp e1 e2) = exprFunctions e1 ++ exprFunctions e2
exprFunctions (ETyped e ty)= exprFunctions e
exprFunctions (EImplArg e) = exprFunctions e
exprFunctions (EFun f) = [f]
exprFunctions _ = []
--exprFunctions :: Expr -> [Fun]
browse :: PGF -> CId -> Maybe (String,[CId],[CId])
browse pgf id = fmap (\def -> (def,producers,consumers)) definition
where