# Created on savesnippets.com ยท https://savesnippets.com/dPy8vsRwhHuv8D from dataclasses import dataclass @dataclass(frozen=True, slots=True) class Ok[T]: value: T @dataclass(frozen=True, slots=True) class Err[E]: error: E type Result[T, E] = Ok[T] | Err[E] def parse_int(s: str) -> Result[int, str]: try: return Ok(int(s)) except ValueError: return Err(f"Not an integer: {s!r}") match parse_int("42"): case Ok(value): print("got", value) case Err(error): print("failed:", error)