module TreeF where
import BranchF
import CompFfun(prepostMapHigh')
import Utils(pair)
import Fudget
data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving (Eq, Ord)
treeF :: Tree (a, F b c) -> F (Path, b) (a, c)
treeF = F{-ff-} . treeF'
treeF' :: Tree (a, F b c) -> FSP (Path, b) (a, c)
treeF' (Leaf (t, f)) = leafF t f
treeF' (Branch l r) = branchFSP (treeF' l) (treeF' r)
leafF t (F sp) =
let pre ([], x) = x
pre _ = error "unknown path in treeF"
in prepostMapHigh' pre (pair t) sp