Currently the code base is rife with records that are partial functions. Additionally, it's hard for users of the library to extract and separate processing of different elements of sum types, meaning they either have to do all the processing of each sum type in the case/function they're writing, or they need to have many "dead" cases where, say, an Event is passed in but they only want to process Ready events, so a maybe value is returned.
This would be a large refactor, and should likely be done in parts.