open <*
suc: T ~ lambda n:T in lambda s:T in lambda z:T in s (n s z) ni ni ni ,
fromInteger:
func[ integer.val->T ] ~
lambda n: integer.val
in
if (integer.leq<a~n,b~0>)?t => ZERO else suc(fromInteger(integer.-<a~n,b~1>)) fi ni ,
plus: T ~ lambda n:T in lambda m:T in ((n suc) m) ni ni ,
times: T ~ lambda n:T in lambda m:T in ((n (plus m)) ZERO) ni ni ,
exp: T ~ lambda n:T in lambda m:T in ((m (times n)) (suc ZERO)) ni ni
*> in
printNatValue( (exp (fromInteger 2))(fromInteger 3) )
ni