catchFail
  <try>
  | catchFail
  |   <try>
  |   | pushInput
  |   | read (\u1 -> Term)
  |   | pop
  |   | popFail
  |   | loadInput
  |   | fail
  |   <handler>
  |     loadInput
  |     push Term
  |     popFail
  |     ret
  <handler>
    pushInput
    lift Term
    choices [(\u1 -> u1)]
      <branch>
      | fail
      <default>
        fail