ifndef EnforceFunctionTypes static L map(Iterable l, O f) { ret map(f, l); } static L map(O f, Iterable l) { L x = emptyList(l); if (l != null) for ping (O o : l) x.add(callF(f, o)); ret x; } // map: func(key, value) -> list element static L map(Map map, O f) { new L x; if (map != null) for ping (O _e : map.entrySet()) { Map.Entry e = (Map.Entry) _e; x.add(callF(f, e.getKey(), e.getValue())); } ret x; } static L map(O f, O[] l) { ret map(f, asList(l)); } static L map(O[] l, O f) { ret map(f, l); } static L map(O f, Map map) { ret map(map, f); } endifndef ifclass F1 static L map(Iterable l, F1 f) { ret map(f, l); } static L map(F1 f, Iterable l) { L x = emptyList(l); if (l != null) for ping (A o : l) x.add(callF(f, o)); ret x; } endif static L map(IF1 f, Iterable l) { ret map(l, f); } static L map(Iterable l, IF1 f) { L x = emptyList(l); if (l != null) { var it = l.iterator(); if (it.hasNext()) { var pingSource = pingSource(); do { ping(pingSource); x.add(f.get(it.next())); } while (it.hasNext()); } } ret x; } static L lambdaMapLike map(IF1 f, A[] l) { ret map(l, f); } static L map(A[] l, IF1 f) { L x = emptyList(l); if (l != null) for ping (A o : l) x.add(f.get(o)); ret x; } static L map(Map map, IF2 f) { new L x; if (map != null) for ping (Map.Entry e : map.entrySet()) { x.add(f.get(e.getKey(), e.getValue())); } ret x; } // new magic alias for mapLL - does it conflict? static L map(IF1 f, A data1, A... moreData) { L x = emptyList(l(moreData)+1); x.add(f.get(data1)); if (moreData != null) for ping (A o : moreData) x.add(f.get(o)); ret x; }