action, environment in struct ResetCancellationId: Hashable {} switch action { case .addCounter: state.counters.insert(CounterState(id: environment.uuid()), at: 0) case .scheduleReset: state.isResetInFlight = true return Effect(value: .reset) .delay(for: .milliseconds(3000), scheduler: environment.mainQueue) .eraseToEffect() .cancellable(id: ResetCancellationId(), cancelInFlight: true) case .reset: state.sum = 0 state.counters = [] state.isResetInFlight = false