catchFail
  <try>
  | push (\u1 -> 'a')
  | read ('a' ==)
  | lift (\u1 -> (\u2 -> u1 u2))
  | popFail
  | ret
  <handler>
    pushInput
    lift Term
    choices [(\u1 -> u1)]
      <branch>
      | push (\u1 -> 'b')
      | read ('b' ==)
      | lift (\u1 -> (\u2 -> u1 u2))
      | ret
      <default>
        fail