class Left (shared L val) { } class Right(shared R val) { } alias Either => Left|Right; T match(Either x, T(L) l, T(R) r) => if (is Left x) then l(x.val) else r(x.val); print(match(Right("lol"), (_) => "", (x) => x));