-- | Internal functions, subject to change. module Data.Tree.Braun.Internal where import Data.Tree.Binary (Tree(..)) -- | A specialised zip-like function which takes a continuation -- rather than using explicit recursion. zipLevels :: a -> ([Tree a] -> [Tree a] -> [Tree a]) -> [Tree a] -> [Tree a] -> [Tree a] zipLevels x a (y:ys) (z:zs) = Node x y z : a ys zs zipLevels x a [] (z:zs) = Node x Leaf z : a [] zs zipLevels x a (y:ys) [] = Node x y Leaf : a ys [] zipLevels x a [] [] = Node x Leaf Leaf : a [] [] {-# NOINLINE zipLevels #-}