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