Ich empfehle Ihnen, Db.intmap_fold_range anstelle von InMap.fold zu verwenden. Es ist schneller als InMap.fold, das die gesamte Karte in OPA erstellen muss, bevor es gefaltet wird.
http://opalang.org/resources/doc/index.html#db.opa.html/!/value_stdlib.core.db.Db.intmap_fold_range
Hier ist ein Beispiel für Ihren Typ:
type person = { name : string
; age : int
}
db /person : intmap(person)
add(name, age) =
/person[age] <- { ~name; ~age }
fold_person(acc, id) =
person = /person[id]
<>{acc}</><li>{person.name} {person.age}</li>
start() =
do add("name1", 1)
do add("name2", 2)
do add("name3", 3)
Db.intmap_fold_range(
@/person,
fold_person,
<></>, 0, none, /* acc, starting key, optional max */
(_ -> true) /* check range */
)
server = one_page_server("Hello", start)