The algebra and calculus of algebraic data types | Hacker News Reader