If one define an
Expr type, in FP it is easy to add new functions (i.e. methods in OOP), but it is difficult to add new cases to the
Expr algebraic structure. In OOP, on the contrary, it is easy adding subtypes of
Expr, but it is difficult adding methods.