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