From 58be1809c46cbe517a18d86d0af52179dcc5cbf6 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 29 Jun 2025 17:31:30 -0700 Subject: Move to nodejs and also lots of significant refactoring that should've been broken up but idgaf --- u/fn/callable.ts | 20 ----------- u/fn/either.ts | 100 ------------------------------------------------------- u/fn/index.ts | 2 -- 3 files changed, 122 deletions(-) delete mode 100644 u/fn/callable.ts delete mode 100644 u/fn/either.ts delete mode 100644 u/fn/index.ts (limited to 'u/fn') diff --git a/u/fn/callable.ts b/u/fn/callable.ts deleted file mode 100644 index 8a61057..0000000 --- a/u/fn/callable.ts +++ /dev/null @@ -1,20 +0,0 @@ -// deno-lint-ignore no-explicit-any -export interface Callable { - (...args: Array): T; -} - -export interface Supplier extends Callable { - (): T; -} - -export interface Mapper extends Callable { - (t: T): U; -} - -export interface BiMapper extends Callable { - (t: T, u: U): R; -} - -export interface SideEffect extends Mapper {} - -export interface BiSideEffect extends BiMapper {} diff --git a/u/fn/either.ts b/u/fn/either.ts deleted file mode 100644 index 8c47b64..0000000 --- a/u/fn/either.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { type Mapper, type Supplier, isObject } from '@emprespresso/pengueno'; - -type IEitherTag = 'IEither'; -const iEitherTag: IEitherTag = 'IEither'; - -export interface _Either { - readonly isLeft: LeftT; - readonly isRight: RightT; - readonly value: T; -} -export type Left = _Either; -export type Right = _Either; - -export interface IEither { - readonly _tag: IEitherTag; - - mapBoth: <_E, _T>(errBranch: Mapper, okBranch: Mapper) => IEither<_E, _T>; - fold: <_T>(folder: Mapper | Right, _T>) => _T; - moveRight: <_T>(t: _T) => IEither; - mapRight: <_T>(mapper: Mapper) => IEither; - mapLeft: <_E>(mapper: Mapper) => IEither<_E, T>; - flatMap: <_T>(mapper: Mapper>) => IEither; - flatMapAsync: <_T>(mapper: Mapper>>) => Promise>; -} - -export class Either implements IEither { - private readonly self: Left | Right; - - private constructor( - init: { err?: E; ok?: T }, - public readonly _tag: IEitherTag = iEitherTag, - ) { - this.self = | Right>{ - isLeft: 'err' in init, - isRight: 'ok' in init, - value: init.err ?? init.ok!, - }; - } - - public moveRight<_T>(t: _T) { - return this.mapRight(() => t); - } - - public fold<_T>(folder: Mapper | Right, _T>): _T { - return folder(this.self); - } - - public mapBoth<_E, _T>(errBranch: Mapper, okBranch: Mapper): IEither<_E, _T> { - if (this.self.isLeft) return Either.left(errBranch(this.self.value)); - return Either.right(okBranch(this.self.value)); - } - - public flatMap<_T>(mapper: Mapper>): IEither { - if (this.self.isRight) return mapper(this.self.value); - return Either.left(this.self.value); - } - - public mapRight<_T>(mapper: Mapper): IEither { - if (this.self.isRight) return Either.right(mapper(this.self.value)); - return Either.left(this.self.value); - } - - public mapLeft<_E>(mapper: Mapper): IEither<_E, T> { - if (this.self.isLeft) return Either.left<_E, T>(mapper(this.self.value)); - return Either.right<_E, T>(this.self.value); - } - - public async flatMapAsync<_T>(mapper: Mapper>>): Promise> { - if (this.self.isLeft) { - return Promise.resolve(Either.left(this.self.value)); - } - return await mapper(this.self.value).catch((err) => Either.left(err)); - } - - static left(e: E): IEither { - return new Either({ err: e }); - } - - static right(t: T): IEither { - return new Either({ ok: t }); - } - - static fromFailable(s: Supplier): IEither { - try { - return Either.right(s()); - } catch (e) { - return Either.left(e as E); - } - } - - static async fromFailableAsync(s: Supplier> | Promise): Promise> { - return await (typeof s === 'function' ? s() : s) - .then((t: T) => Either.right(t)) - .catch((e: E) => Either.left(e)); - } -} - -export const isEither = (o: unknown): o is IEither => { - return isObject(o) && '_tag' in o && o._tag === 'IEither'; -}; diff --git a/u/fn/index.ts b/u/fn/index.ts deleted file mode 100644 index 1ec71aa..0000000 --- a/u/fn/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './callable.js'; -export * from './either.js'; -- cgit v1.2.3-70-g09d2