Создание бинарного дерева

Ещё один интересный сниппет из рассылки.
Был задан вопрос о том, как конструировать бинарное дерево в haXe.
В ответ дали два простых варианта, каждый из которых по своему красив (лично мне понравился больше второй).

1. C помощью typedef:

typedef BinTree<T> = {
    var value : T;
    var left : BinTree<T>;
    var right : BinTree<T>;
}

2. Enum:

enum BinTree<T> {
  Node(v: T, lft : BinTree<T>, rgt : BinTree<T>);
  Leaf(v: T);
}