class ParsingState {
  final Set<Mite> mites
  final Set<Mite> active
  //...
  ParsingState apply(update) {
     ParsingState state = copyWith(mites: mites + update)
     state = state.copyWith(active: state.suggestActive(update))
     // try possible alternatives
     for (mite in update) {
        if (!(mite in state.active)) {
          state = state.tryAlternative(mite)
        }
     }
     return state
  }
}