Polymorphise meta tree labels
This commit is contained in:
+8
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user