Algebraic data types (ADTs) are fundamental in functional programming and closely resemble mathematical algebra. Equivalence between algebraic data types and algebra allows counting inhabitants of types using algebraic expressions. Manipulating ADTs using algebra rules leads to insightful transformations, such as simplifying Choice a to 2×a, connecting algebra to familiar concepts. Connection between ADTs and calculus is discovered through differentiation, enabling efficient editing of data structures using zippers. The surprising appearance of differentiation in discrete settings is notable. Challenges arise when extending the analogy to integration. Overall, ADTs offer a rich playground for exploration, from counting inhabitants to building complex zippers for any data type, showcasing the powerful connection between mathematics and programming.

https://codewords.recurse.com/issues/three/algebra-and-calculus-of-algebraic-data-types