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
再帰構造をもつオブジェクトに対して、フィールドを再帰的に適用できました。