export interface Err { readonly _tag: 'Err'; readonly ok?: A; readonly err: E; } export interface Ok { readonly _tag: 'Ok'; readonly ok: A; readonly err?: E; } export type Result = Ok | Err; export type OkOf = R extends Result ? A : never; export type ErrOf = R extends Result ? E : never; export type ResultOf = R extends Ok ? Result : R extends Err ? Result : R extends Result ? Result : never;