pushValue (\u1 -> (\u2 -> u1 Term)) : | lift2Value (\u1 -> (\u2 -> u1 u2)) | read ('b' ==) | lift2Value (\u1 -> (\u2 -> u1 u2)) | ret catchException "fail" | pushValue (\u1 -> (\u2 -> (\u3 -> 'a' : u2 u3))) | read ('a' ==) | lift2Value (\u1 -> (\u2 -> u1 u2)) | call | lift2Value (\u1 -> (\u2 -> u1 u2)) | popException "fail" | refJoin pushInput lift2Value Term choicesBranch [(\u1 -> u1)] | pushValue (\u1 -> u1) | refJoin raiseException "fail"