from typing import Optional, TypeVar, Callable T = TypeVar('T') def exists(opt: Optional[T], cond: Callable[[T], bool]) -> bool: match opt: case None: return False case _: return cond(opt) def foreach(opt: Optional[T], call: Callable[[T], None]) -> None: match opt: case None: return None case _: return call(opt) def get(opt: Optional[T]) -> T: match opt: case None: raise ValueError("get on None") case _: return opt