Algebraic Data Types (ADTs) and pattern matching in functional languages
lay a fertile ground to conveniently define and process data types as tree-like
structures. However, in these grounds, trees often cannot grow; once a data type
is defined and compiled, its definition cannot be extended.