def parse(cls, s, i, parse_control_fun): next = parsing.consume_char(s, i, "{") if next is None: return (None, i) else: i = next (ctype, i) = parse_control_fun(s, i) i = parsing.consume_char(s, i, "}", "Unmatched {") return (SetType(ctype), i)
def parse(cls, s, i, parse_control_fun): next = parsing.consume_char(s, i, "<") if next is None: return (None, i) else: i = next (left, i) = parse_control_fun(s, i) i = parsing.consume_char(s, i, ",", "Missing comma") (right, i) = parse_control_fun(s, i) i = parsing.consume_char(s, i, ">", "Unmatched <") return (FunType(left, right), i)
def parse(cls, s, i, parse_control_fun): next = parsing.consume_char(s, i, "(") if next is None: return (None, i) else: i = next signature = [] while i < len(s) and s[i] != ")": (m, i) = parse_control_fun(s, i) signature.append(m) if s[i] == ")": break i = parsing.consume_char(s, i, ",", "Missing comma in tuple") i = parsing.consume_char(s, i, ")", "Unmatched ( in tuple type") return (TupleType(*signature), i)
def parse(cls, s, i, parse_control_fun): new_i = parsing.consume_char(s, i, "?") if new_i is None: return (None, i) else: return (UnknownType(), new_i)