uniquely-represented-sets-0.1.0.0: src/Data/Tree/Braun/Properties.hs
-- | This module provides functions to test invariants of Braun trees.
module Data.Tree.Braun.Properties where
import Data.Tree.Binary
-- | Returns true iff the tree is a Braun tree.
isBraun :: Tree a -> Bool
isBraun = zygoTree (0 :: Int) (\_ l r -> 1 + l + r) True alg
where
alg _ lsize lbrn rsize rbrn =
lbrn && rbrn && (lsize == rsize || lsize - 1 == rsize)