sclass ConceptShadow { Map map; bool refsConvertedToIDs; *(Concept c) { map = conceptShadow_rawMap(c); MetaTransformer tf = metaTransformer_collectionAndMap(); // dereference concept refs map = toMinimalMap((Map) tf.transform(lambda1 derefRefOrNull, map); } void convertRefsToIDs { if (refsConvertedToIDs) ret; set refsConvertedToIDs; MetaTransformer tf = metaTransformer_collectionAndMap(); map = toMinimalMap(mapValues(map, o -> tf.transform(lambda1 conceptToIDObj_gen, o))); } toString { ret "ConceptShadow " + stringIf(refsConvertedToIDs, "[converted] ") + map; } O get(O key) { ret mapGet(map, key); } }