Caml-list,

I have to write an interpreter for a language that has arrays explicitly indexed by anything that can be sequential (list, range, set)

    {string} airports = {"ATL", "JFK"};
    range index = 1 .. 2;
    tuple recordAirport { airport : string; id : int }
    {recordAirport} otherAiports = { <"ATL", 12345>, <"JFK", 42>};

    int myArray [airports][index] = [[1, 2], [3, 4]];
    string myArray2 [a in recordAirports][i in index] = (i < a.id) ? "unknown" : a.airport ;
    int mySliceOfArray [a in recordAirports]  = sum (i in index) myArray[a.airport][i];

Usually the trick in interpreter implementation is to transform everything back to "one-dimensional" objects
- simple types
- inductive constructions for lists
- curried functions

For instance in the book "Le langage Caml" the return type of the eval function is

type value =
   | Val_number of int
   | Val_boolean of bool
   | Val_pair of value * value
   | Val_nil
   | Val_cons of value * value
   | Val_closure of closure
   | Val_primitive of value -> value
and closure = { definition: (pattern * expression) list; mutable environnement: environnement }
and environnement == (string * value) list

I don't see however how I am going to represent a type Val_Array given that the indexes can be of arbitrary type and in arbitrary number.
I haven't found either how to transform the arrays into inductive types like lists to avoid the issue.

Any suggestions ?

        Diego Olivier