         )
     }
 
-    fileprivate func done(todo: ToDo) -> State {
-        let todos: [ToDos.ToDoInBox] = self.todos.todos.map {
-            if $0.todo.id != todo.id {
-                return $0
-            } else {
-                return $0.toggleDone()
-            }
-        }
-
+    fileprivate func done(_ todo: ToDo) -> State {
         return .init(
             tags: tags,
-            todos: .init(todos: todos)
+            todos: self.todos.done(todo)
         )
     }
 

    case let .remove(todo):
        return state.remove(todo: todo)
    case let .done(todo):
        return state.done(todo: todo)
    case let .move(todo, box):
        return state.move(todo, to: box)
    }

            tags: tags,
            todos: .init(todos: todos)
        )
    }
}

extension ToDos {
    fileprivate func done(_ todo: ToDo) -> ToDos {
        let todos: [ToDos.ToDoInBox] = self.todos.map {
            if $0.todo.id != todo.id {
                return $0
            } else {
                return $0.toggleDone()
            }
        }

        return .init(todos: todos)
    }
}

