!7 sclass Blob { L<Pair<S>> items = new L; } static new Map<S, Blob> blobs; p { blobs.put("nasty", parseBlob([[something nasty -> You're an asshole]])); printStruct(blobs); assertEqualsVerbose("You're an asshole", blobLookupIC(blobs.get("nasty"), "Something nasty")); print("OK"); } static Blob parseBlob(S s) { new Blob blob; for (S line : toLinesFullTrim(s)) { L<S> l = splitAtSimpleArrow(line); if (l(l) == 2) blob.items.add(mapPair(f trim, listToPair(l))); } ret blob; } static S blobLookupIC(Blob blob, S key) { if (blob != null) for (Pair<S> p : blob.items) if (eqic(p.a, key)) ret p.b; null; }