Polymorphise meta tree labels

This commit is contained in:
2022-06-13 15:22:15 +01:00
parent 31e7f4290e
commit 7a07fc97c2
19 changed files with 67 additions and 97 deletions
+8 -10
View File
@@ -24,9 +24,11 @@ module TreeHelp
, updateRandNode
, safeUpdateSingleNode
, msafeUpdateSingleNode
, numTraversable
) where
import RandomHelp
import Data.Traversable
import Data.Maybe
import Data.Tree.Lens
import Data.Tree
@@ -183,15 +185,11 @@ splitTrunk t = do
i <- state $ randomR (0, trunkDepth t)
return $ splitTrunkAt i t
numTraversable :: Traversable t => t a -> t (a,Int)
numTraversable = snd . mapAccumL f 0
where
f i x = (i+1,(x,i))
-- untested
inorderNumberTree :: Tree a -> Tree (a,Int)
inorderNumberTree = fst . f 0
where
f i (Node x ts) =
let (ts',i') = g (i+1) ts
in (Node (x,i) ts', i')
g i (t:ts) =
let (t',i') = f i t
(ts',i'') = g i' ts
in (t': ts', i'')
g i [] = ([], i)
inorderNumberTree = numTraversable