!7 concept ColorName { S color, name, comment; } module ColorNames > DynCRUD { *() { super(ColorName); } // API void addColorName(Color color, S name, S comment) { uniq_sync(ColorName, color := colorToHex(color), +name, +comment); } S getClosestColorName(Color color) { new Lowest best; for (ColorName cn) best.put(cn.name, colorDiff(color, colorFromHex(cn.color))); ret best!; } }