Ok branch: a tuple of the remaining input data, and the output value.
The output value is of the O type if the output mode was Emit, and ()
if the mode was Check
Err branch: an error of the E type if the erroor mode was Emit, and ()
if the mode was Check