catchFail | push (\x0 -> (\x1 -> x0)) 'a' | read | lift (\x0 -> (\x1 -> x0 x1)) | popFail | ret pushInput lift Pure choices [id] | push (\x0 -> (\x1 -> x0)) 'b' | read | lift (\x0 -> (\x1 -> x0 x1)) | ret fail