{-# LANGUAGE DeriveFunctor #-}
-- | A simple binary tree type, 'BinaryTree'.
module Data.BinaryTree 
  ( BinaryTree(..)
  ) where

-- | A binary tree
--
-- Since there are multiple ways to traverse a 'BinaryTree', see 
-- "Data.Traversable.TreeLike" for newtype-wrappers with 'Traversable' instances.
data BinaryTree a = Leaf | Branch (BinaryTree a) a (BinaryTree a)
  deriving (Int -> BinaryTree a -> ShowS
[BinaryTree a] -> ShowS
BinaryTree a -> String
(Int -> BinaryTree a -> ShowS)
-> (BinaryTree a -> String)
-> ([BinaryTree a] -> ShowS)
-> Show (BinaryTree a)
forall a. Show a => Int -> BinaryTree a -> ShowS
forall a. Show a => [BinaryTree a] -> ShowS
forall a. Show a => BinaryTree a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> BinaryTree a -> ShowS
showsPrec :: Int -> BinaryTree a -> ShowS
$cshow :: forall a. Show a => BinaryTree a -> String
show :: BinaryTree a -> String
$cshowList :: forall a. Show a => [BinaryTree a] -> ShowS
showList :: [BinaryTree a] -> ShowS
Show, (forall a b. (a -> b) -> BinaryTree a -> BinaryTree b)
-> (forall a b. a -> BinaryTree b -> BinaryTree a)
-> Functor BinaryTree
forall a b. a -> BinaryTree b -> BinaryTree a
forall a b. (a -> b) -> BinaryTree a -> BinaryTree b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> BinaryTree a -> BinaryTree b
fmap :: forall a b. (a -> b) -> BinaryTree a -> BinaryTree b
$c<$ :: forall a b. a -> BinaryTree b -> BinaryTree a
<$ :: forall a b. a -> BinaryTree b -> BinaryTree a
Functor, BinaryTree a -> BinaryTree a -> Bool
(BinaryTree a -> BinaryTree a -> Bool)
-> (BinaryTree a -> BinaryTree a -> Bool) -> Eq (BinaryTree a)
forall a. Eq a => BinaryTree a -> BinaryTree a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => BinaryTree a -> BinaryTree a -> Bool
== :: BinaryTree a -> BinaryTree a -> Bool
$c/= :: forall a. Eq a => BinaryTree a -> BinaryTree a -> Bool
/= :: BinaryTree a -> BinaryTree a -> Bool
Eq)