case classInProgressState(textSoFarReversed: List[Char], frameState: FrameState, textRemainingInCurrentTransition: NonEmptyList[Char], targetState: TemplateState) extends ValidState with Product with Serializable
case classInvalidState(lastGoodState: ValidState, numGoodCharacters: Int) extends Product with Serializable