type key
type data
type accum
val identity : accum
val singleton : key:key ‑> data:data ‑> accum
val combine : accum ‑> accum ‑> accum
combine is required to be associative and have identity as its identity. In other words, they must form a monoid.
combine
identity