[util.inspect.custom]() {
return `Map(${inspect(this.$value)})`;
return Map.of(Object.assign({}, this.$value, singleton));
reduceWithKeys(fn, zero) {
return Object.keys(this.$value)
.reduce((acc, k) => fn(acc, this.$value[k], k), zero);
return this.reduceWithKeys(
(m, v, k) => m.insert(k, fn(v)),
// ----- Traversable (Map a)
return this.traverse(of, identity);
return this.reduceWithKeys(
(f, a, k) => fn(a).map(b => m => m.insert(k, b)).ap(f),