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