//Explicit type by alternate representation. //Records. These are data structures and function signatures. //These records define natural numbers and addition. Nat[]. //A natural number - in other languages this would be a type. Untyped[]. //Denotes that a value needs to be typed. Zero[]. //0 - in other languages this would be an ADT or singleton. Succ[prev]. //1 + prev - in other languages this would be an ADT, structure, or object. Add[a, b]. //a + b - in other languages this would be a function. //Reducers. Reducers are like function implementations. These reducers "implement" Add. Add[a: Nat[], b: Nat[]] | Untyped[]: Nat[] //Adding naturals produces a natural. Add[a: Zero[], b]: bprev