code: def try_choice(self, other):
          '''(^) Choice with backtrack. This combinator is used whenever arbitrary
          look ahead is needed. The parser p || q first applies p, if it success,
          the value of p is returned. If p fails, it pretends that it hasn't consumed
          any input, and then parser q is tried.
          '''
          @Parser
          def try_choice_parser(text, index):
              res = self(text, index)
              return res if res.status else other(text, index)
          return try_choice_parsef try_choice(self, other):
          '''(^) Choice with backtrack. This combinator is used whenever arbitrary
          look ahead is needed. The parser p || q first applies p, if it success,
          the value of p is returned. If p fails, it pretends that it hasn't consumed
          any input, and then parser q is tried.
          '''
          @Parser
          def try_choice_parser(text, index):
              res = self(text, index)
              return res if res.status else other(text, index)
          return try_choice_parser
docs: (^) Choice with backtrack. This combinator is used whenever arbitrary
          look ahead is needed. The parser p || q first applies p, if it success,
          the value of p is returned. If p fails, it pretends that it hasn't consumed
          any input, and then parser q is tried.