| 21190 |      1 | structure Nat = 
 | 
| 21147 |      2 | struct
 | 
|  |      3 | 
 | 
| 24421 |      4 | datatype nat = Suc of nat | Zero_nat;
 | 
| 21147 |      5 | 
 | 
| 25160 |      6 | val one_nat : nat = Suc Zero_nat;
 | 
|  |      7 | 
 | 
| 21190 |      8 | fun plus_nat (Suc m) n = plus_nat m (Suc n)
 | 
| 22751 |      9 |   | plus_nat Zero_nat n = n;
 | 
| 21147 |     10 | 
 | 
| 21994 |     11 | fun times_nat (Suc m) n = plus_nat n (times_nat m n)
 | 
|  |     12 |   | times_nat Zero_nat n = Zero_nat;
 | 
| 21147 |     13 | 
 | 
| 21190 |     14 | end; (*struct Nat*)
 | 
| 21147 |     15 | 
 | 
|  |     16 | structure Codegen = 
 | 
|  |     17 | struct
 | 
|  |     18 | 
 | 
| 21994 |     19 | fun fac (Nat.Suc n) = Nat.times_nat (Nat.Suc n) (fac n)
 | 
| 25160 |     20 |   | fac Nat.Zero_nat = Nat.one_nat;
 | 
| 21147 |     21 | 
 | 
|  |     22 | end; (*struct Codegen*)
 |