ziv@2203: functor MultimapFn (structure KeyMap : ORD_MAP structure ValSet : ORD_SET) = struct ziv@2203: type key = KeyMap.Key.ord_key ziv@2203: type item = ValSet.item ziv@2203: type items = ValSet.set ziv@2203: type multimap = ValSet.set KeyMap.map ziv@2203: fun inserts (kToVs : multimap, k : key, vs : items) : multimap = ziv@2203: KeyMap.unionWith ValSet.union (kToVs, KeyMap.singleton (k, vs)) ziv@2203: fun insert (kToVs : multimap, k : key, v : item) : multimap = ziv@2203: inserts (kToVs, k, ValSet.singleton v) ziv@2203: fun find (kToVs : multimap, k : key) = ziv@2203: case KeyMap.find (kToVs, k) of ziv@2203: SOME vs => vs ziv@2203: | NONE => ValSet.empty ziv@2203: end