diff options
author | 2014-03-25 02:04:06 -0400 | |
---|---|---|
committer | 2014-03-25 02:04:06 -0400 | |
commit | 93d6de491838eb3607a12686bfdc250366aa60e4 (patch) | |
tree | 2da01b66e562296fe3720e6fcfdee0311bb7d077 /src/multimap_fn.sml | |
parent | 0e1252d5a6330570df698df924a0554b688042e8 (diff) |
ML half of initial prototype. (Doesn't compile because there's no C yet.)
Diffstat (limited to 'src/multimap_fn.sml')
-rw-r--r-- | src/multimap_fn.sml | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/multimap_fn.sml b/src/multimap_fn.sml new file mode 100644 index 00000000..585b741f --- /dev/null +++ b/src/multimap_fn.sml @@ -0,0 +1,14 @@ +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 |