--!strict export type Identity = { ok: true, val: T, } | { ok: false, err: string, } local function construct(ok: boolean, value: T & string): Identity if ok then return { ok = true, val = value, } else return { ok = false, err = value, } end end return (construct :: any) :: ((ok: true, value: T) -> Identity) & ((ok: false, value: string) -> Identity)