type ('k,'a) map val empty: ('k,'a) map val find: 'k -> ('k,'a) map -> 'a val add: 'k -> 'a -> ('k,'a) map -> ('k,'a) map val remove: 'k -> ('k,'a) map -> ('k,'a) map val restrict: ('k -> bool) -> ('k,'a) map -> ('k,'a) map val fold: ('k -> 'a -> 'b -> 'b) -> ('k,'a) map -> 'b -> 'b