// Copyright (c) 2021 MillenniumEarl // // This software is released under the MIT License. // https://opensource.org/licenses/MIT export type Result = Failure | Success; export class Failure { readonly value: L; constructor(value: L) { this.value = value; } isFailure(): this is Failure { return true; } isSuccess(): this is Success { return false; } applyOnSuccess(_: (a: A) => B): Result { return this as any; } } export class Success { readonly value: A; constructor(value: A) { this.value = value; } isFailure(): this is Failure { return false; } isSuccess(): this is Success { return true; } applyOnSuccess(func: (a: A) => B): Result { return new Success(func(this.value)); } } export const failure = (l: L): Result => { return new Failure(l); }; export const success = (a: A): Result => { return new Success(a); };