Algebraic data types: Difference between revisions