sclass AutoMap extends AbstractMap { Map map = new HashMap; O f; *() {} *(O *f) {} public B get(O a) { if (map.containsKey(a)) ret map.get(a); B b = cast f instanceof Class ? nu((Class) f) : callF(f, a); map.put((A) a, b); ret b; } // unclear semantics public bool containsKey(O a) { ret map.containsKey(a); } public Set> entrySet() { ret map.entrySet(); } }