//Uses ambiguous matches - might change in future. //Separates values into 'Value[a] | Type[a]'. Res[rec, prim]. //The type system Value[a]. //An untyped value. Type[a]. //A value's type. //Values Zero[]. Succ[prev]. Add[a, b]. Fib[b]. Fib3[a]. //Types Nat[]. //Type signatures Add[a: Type[a: Nat[]], b: Type[a: Nat[]]]: Type[a: Nat[]] Fib[b: Type[a: Nat[]]]: Type[a: Nat[]] Fib3[a: Type[a: Nat[]]]: Type[a: Nat[]] //Untyped functions Add[a: Value[a: Zero[]], b: Value[a]]: Value[a: baaprevaaprevaprevprevaaaaa