From ca73f4554c044b17c3a27f4db262fee482576f12 Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 29 Mar 2013 11:45:42 +0000 Subject: [PATCH] option pt -funs to show all fun's in a tree --- src/compiler/GF/Command/TreeOperations.hs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/compiler/GF/Command/TreeOperations.hs b/src/compiler/GF/Command/TreeOperations.hs index ea6180317..bf8882802 100644 --- a/src/compiler/GF/Command/TreeOperations.hs +++ b/src/compiler/GF/Command/TreeOperations.hs @@ -27,7 +27,9 @@ allTreeOps pgf = [ ("smallest",("sort trees from smallest to largest, in number of nodes", Left $ smallest)), ("subtrees",("return all fully applied subtrees (stopping at abstractions), by default sorted from the largest", - Left $ concatMap subtrees)) + Left $ concatMap subtrees)), + ("funs",("return all fun functions appearing in the tree, with duplications", + Left $ concatMap funNodes)) ] largest :: [Expr] -> [Expr] @@ -45,6 +47,13 @@ subtrees t = t : case unApp t of Just (f,ts) -> concatMap subtrees ts _ -> [] -- don't go under abstractions +funNodes :: Expr -> [Expr] +funNodes t = case t of + EAbs _ _ e -> funNodes e + EApp e1 e2 -> funNodes e1 ++ funNodes e2 + EFun _ -> [t] + _ -> [] -- not literals, metas, etc + --- simple-minded transfer; should use PGF.Expr.match transfer :: PGF -> CId -> Expr -> Expr