this repo has no description

Simplify type of row rest

authored by bernsteinbear.com and committed by

Max Bernstein 9463fb34 94d81ac1

+4 -4
+4 -4
scrapscript.py
··· 4034 4034 @dataclasses.dataclass 4035 4035 class TyRow(MonoType): 4036 4036 fields: dict[str, MonoType] 4037 - rest: TyVar | TyRow | TyEmptyRow = dataclasses.field(default_factory=TyEmptyRow) 4037 + rest: TyVar | TyEmptyRow = dataclasses.field(default_factory=TyEmptyRow) 4038 4038 4039 4039 def __post_init__(self) -> None: 4040 4040 if not self.fields and isinstance(self.rest, TyEmptyRow): ··· 4241 4241 return ty 4242 4242 if isinstance(ty, TyRow): 4243 4243 rest = apply_ty(ty.rest, subst) 4244 - assert isinstance(rest, (TyVar, TyRow, TyEmptyRow)) 4244 + assert isinstance(rest, (TyVar, TyEmptyRow)) 4245 4245 return TyRow({key: apply_ty(val, subst) for key, val in ty.fields.items()}, rest) 4246 4246 raise InferenceError(f"Unknown type: {ty}") 4247 4247 ··· 4325 4325 return set_type(pattern, result_ty) 4326 4326 if isinstance(pattern, Record): 4327 4327 fields = {} 4328 - rest: TyVar | TyRow | TyEmptyRow = empty_row # Default closed row 4328 + rest: TyVar | TyEmptyRow = empty_row # Default closed row 4329 4329 for key, value in pattern.data.items(): 4330 4330 if isinstance(value, Spread): 4331 4331 # Open row ··· 4395 4395 return set_type(expr, result) 4396 4396 if isinstance(expr, Record): 4397 4397 fields = {} 4398 - rest: TyVar | TyRow | TyEmptyRow = empty_row 4398 + rest: TyVar | TyEmptyRow = empty_row 4399 4399 for key, value in expr.data.items(): 4400 4400 assert not isinstance(value, Spread), "Spread can only occur in record match (for now)" 4401 4401 fields[key] = infer_type(value, ctx)