-- Handle events and simulate their side effects, then ignore the side effects
-- and return the new state.
handleEventsFlat :: [Event] -> ProjectState -> ProjectState
handleEventsFlat events state =
  getState $ foldlM (flip $ handleEvent testProjectConfig) state events
handleEventsFlat :: [Event] -> ProjectState -> ProjectState
handleEventsFlat events state =
  getState $ foldlM (flip $ handleEvent testProjectConfig) state events
handleEventsFlat events state =
  getState $ foldlM (flip $ handleEvent testProjectConfig) state events