1    type Token =
2        let f : Unit -> Unit
3        let mut is_discarded = false
4    
5        def discard =
6            assert not is_discarded
7            is_discarded = true
8            f ()
9    
10   object Token =
11       def from (t1 : Token
12                 t2 : Token) = Token { t2.discard
13                                       t1.discard }
14   
15       def from (t1 : Token
16                 t2 : Token
17                 t3 : Token) = Token { t3.discard
18                                       t2.discard
19                                       t1.discard }
20   
21       def from (t1 : Token
22                 t2 : Token
23                 t3 : Token
24                 t4 : Token) = Token { t4.discard
25                                       t3.discard
26                                       t2.discard
27                                       t1.discard }
28   
29       def from (t1 : Token
30                 t2 : Token
31                 t3 : Token
32                 t4 : Token
33                 t5 : Token) = Token { t5.discard
34                                       t4.discard
35                                       t3.discard
36                                       t2.discard
37                                       t1.discard }
38