//Implicit types by alternate representation. "Hacky" but easy. //Infinitely recurses using the current interpreter - need a special //interpreter which handles values which reduce to themselves. //Records. These are data structures and function signatures. //These records define natural numbers and addition. 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. Nat[]. //A natural number - in other languages this would be a type. //Reducers. Reducers are like function implementations. These reducers "implement" Add. Add[a: Zero[], b]: bprev