Ocaml Phrasebook (part 5) Unions are different, and it's important. template type 'a tree = union tree { Branch of ('a tree * 'a tree) pair < tree &, | Node of 'a tree & > branch; T & node; }; Why is the difference important? Because the union elements on the right are disjoint. You cannot treat a Node x as a Branch (x, y). You have to match a 'a tree value against its constructors. Like this: match somevalue with Branch (x,y) -> frobnicate_branch x y | Node x -> frobnicate_node x