A type that depends on another type that depends on the current type
Example
A tree with branches that contain the values.
data Tree a = Empty
| Node (Branch a) (Branch a)
data Branch a = Branch a (Tree a)
listTree :: Tree a -> [a]
listTree Empty = []
listTree (BNode l r) = (listBranch l) ++ (listBranch r)
listBranch :: Branch a -> [a]
listBranch (Branch v t) = v : listTree t