             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)
     }
 }
 

    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)
    }

        )
    }

    fileprivate func done(_ todo: ToDo) -> State {
        return .init(
            tags: tags,
            todos: self.todos.done(todo)
        )
    }

