Fields in Tree

Define fields in a tree

data Tree a = Leaf {leaf :: a} | 
              Node {left :: Tree a} {right :: Tree a} deriving Show
     
-- define data       

leaf1 = Leaf 1
tree1 = Node leftTree rightTree
           where leftTree = Leaf 1
                 rightTree = Node (Leaf 2) (Leaf 3)  

-- apply fields

>leaf leaf1
Leaf {leaf = 1}

>left tree1
Leaf {leaf = 1}

>right tree1 
Node {left = Leaf {leaf = 2}, right = Leaf {leaf = 3}}

>left $ right tree1
Leaf {leaf = 2}

>leaf $ left tree1
1

再帰構造をもつオブジェクトに対して、フィールドを再帰的に適用できました。