State >>
 Items : Array | List
 Step : Integer
;

Report >>
 Key, Record : Arg
 Step : Integer
 Continue : 1 | 0
 Ext : < State : Record >
;

Data >>
 Rq : Arg
 Key, Record : Arg
 Value : Arg
 Step : Integer
 Precision : Float | Const
;

/* * */

Enumerate ->
Arg T : ^&Record, Items : Array | List, Rq : Arg, Pc : Float | Const 
    Value : < &Arg, Arg >, Store : < Arg, Integer >, Match : < ^&Report, Data >

Let Items, ERR_NO_DATA

En : State = < Items : _, Step : 0 > ..
R : Report = < Ext.State : T, Continue : 1 > ..

- Enumerate 'En' R Value ( K H V S : 
                                     - Match >R< < 
                                                   Rq : Rq
                                                   Key : K, Record : H
                                                   Value : V, Step : S
                                                   Precision : Pc 
                                                 > 
                         ),
  Store R.Record R.Step R.Key

/

/* * */

Enumerate Enumerate ->
Arg En : ^&State, R : Report 
    Value : < &Arg, Arg > 
    Deliver : < Arg, Arg, Integer >

Do while Next R En.Items
 Detach En.Items Key, Record _

 - Value Record 'V',
   Deliver Key Record V En.Step
 ' En.Step ++
;

/

/* * */

Next Enumerate Enumerate ->
Arg R : Report, Items : Array | List

0 << !R.Continue
0 << !Items

  >> 1

/