testbench-0.1.0.0: src/TestBench/LabelTree.hs
{-# LANGUAGE DeriveFunctor #-}
{- |
Module : TestBench.LabelTree
Description : Labelled rose-tree structure
Copyright : (c) Ivan Lazar Miljenovic
License : MIT
Maintainer : Ivan.Miljenovic@gmail.com
-}
module TestBench.LabelTree where
--------------------------------------------------------------------------------
-- | A simple labelled rose-tree data structure.
data LabelTree a = Leaf a
| Branch String [LabelTree a]
deriving (Eq, Ord, Show, Read, Functor)
toCustomTree :: (a -> b) -> (String -> [b] -> b) -> LabelTree a -> b
toCustomTree lf br = go
where
go tr = case tr of
Leaf a -> lf a
Branch str trs -> br str (map go trs)