!7

concept Entry {
  S line, category, answer;
}

module LineToCategory > DynCRUD<Entry> {
  *() { super(Entry); }
  
  // API
  
  void setAnswer(S line, S category, S answer) {
    Entry e = uniq_sync(Entry, +line, +category);
    if (e.answer != null && nempty(e.answer, answer)) programLogStructure(litorderedmap(
      action := "Overwritten",
      +line, +category, oldAnswer := e.answer, +answer));
    cset(e, +answer);
  }
}