view src/multimap_fn.sml @ 2209:0ca11d57c175

Cleans up interface (it's now a command line option) and renames project to "sqlcache" in the all-one-word style. Still has issues to do with concurrency, retrying transactions, and foreign function calls that either rely on state or have side effects.
author Ziv Scully <ziv@mit.edu>
date Sat, 31 May 2014 03:08:16 -0400
parents 39faa4a037f4
children 365727ff68f4
line wrap: on
line source
functor MultimapFn (structure KeyMap : ORD_MAP structure ValSet : ORD_SET) = struct
    type key = KeyMap.Key.ord_key
    type item = ValSet.item
    type items = ValSet.set
    type multimap = ValSet.set KeyMap.map
    fun inserts (kToVs : multimap, k : key, vs : items) : multimap =
        KeyMap.unionWith ValSet.union (kToVs, KeyMap.singleton (k, vs))
    fun insert (kToVs : multimap, k : key, v : item) : multimap =
        inserts (kToVs, k, ValSet.singleton v)
    fun find (kToVs : multimap, k : key) =
        case KeyMap.find (kToVs, k) of
            SOME vs => vs
          | NONE => ValSet.empty
end