| 21190 |      1 | structure Nat = 
 | 
| 21147 |      2 | struct
 | 
|  |      3 | 
 | 
| 24421 |      4 | datatype nat = Suc of nat | Zero_nat;
 | 
| 21147 |      5 | 
 | 
| 21190 |      6 | end; (*struct Nat*)
 | 
| 21147 |      7 | 
 | 
|  |      8 | structure Codegen = 
 | 
|  |      9 | struct
 | 
|  |     10 | 
 | 
| 22386 |     11 | type 'a null = {null : 'a};
 | 
|  |     12 | fun null (A_:'a null) = #null A_;
 | 
| 21147 |     13 | 
 | 
| 25182 |     14 | fun head A_ (x :: xs) = x
 | 
|  |     15 |   | head A_ [] = null A_;
 | 
| 21147 |     16 | 
 | 
| 25056 |     17 | val null_option : 'a option = NONE;
 | 
|  |     18 | 
 | 
|  |     19 | fun null_optiona () = {null = null_option} : ('a option) null;
 | 
| 21147 |     20 | 
 | 
| 21190 |     21 | val dummy : Nat.nat option =
 | 
| 25056 |     22 |   head (null_optiona ()) [SOME (Nat.Suc Nat.Zero_nat), NONE];
 | 
| 21147 |     23 | 
 | 
|  |     24 | end; (*struct Codegen*)
 |