sealed class Result { Result map(Y Function(T value) mapper); Result flatMap(Result Function(T value) mapper); } final class Ok implements Result { final T value; const Ok(this.value); @override Result map(Y Function(T value) mapper) => Ok(mapper(value)); @override Result flatMap(Result Function(T value) mapper) => mapper(value); } final class Err implements Result { final E value; const Err(this.value); @override Result map(Y Function(T value) mapper) => Err(value); @override Result flatMap(Result Function(T value) mapper) => Err(value); }