Skip to content

Commit

Permalink
feat: either chain-rec functor
Browse files Browse the repository at this point in the history
  • Loading branch information
Hfutsora committed Jul 20, 2022
1 parent 1c6aeb2 commit 992160f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
6 changes: 5 additions & 1 deletion src/Either.ts
Original file line number Diff line number Diff line change
Expand Up @@ -313,9 +313,13 @@ export const Monad: Monad2<EitherKind> = {
chain: _chain
}

/**
* ChainRec Functor
*/
export const ChainRec: ChainRec2<EitherKind> = {
URI: EitherKind,
map: _map,
ap: _ap,
chain: _chain
chain: _chain,
chainRec: _chainRec
}
6 changes: 3 additions & 3 deletions src/Functors/ChainRec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ import { Chain, Chain1, Chain2 } from './Chain'
import { Either } from '../Either'

export interface ChainRec<F> extends Chain<F> {
readonly chainRec: <A, B>(fa: HKT<F, A>, f: (a: A) => Either<HKT<F, A>, HKT<F, B>>) => HKT<F, B>
readonly chainRec: <A, B>(fa: A, f: (a: A) => Either<HKT<F, A>, HKT<F, B>>) => HKT<F, B>
}

export interface ChainRec1<F extends URIS> extends Chain1<F> {
readonly chainRec: <A, B>(fa: KindOf<F, [A]>, f: (a: A) => Either<KindOf<F, [A]>, KindOf<F, [B]>>) => KindOf<F, [B]>
readonly chainRec: <A, B>(fa: A, f: (a: A) => Either<KindOf<F, [A]>, KindOf<F, [B]>>) => KindOf<F, [B]>
}

export interface ChainRec2<F extends URIS> extends Chain2<F> {
readonly chainRec: <E, A, B>(fa: KindOf<F, [E, A]>, f: (a: A) => KindOf<F, [E, Either<A, B>]>) => KindOf<F, [E, B]>
readonly chainRec: <E, A, B>(fa: A, f: (a: A) => KindOf<F, [E, Either<A, B>]>) => KindOf<F, [E, B]>
}

/**
Expand Down

0 comments on commit 992160f

Please sign in to comment.