NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3958 most downloaded on npm
Functional programming in TypeScript
Last release 1 years ago
18 Aug 2025
Release timing varies
gaps range from 2 weeks to 9 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
233 releases · first in 2017
add missing bracket function (@mlegenhausen)
ReaderTaskEither
bracket function (@mlegenhausen)fix sequenceT, sequenceS implementations, closes #914 (@gcanti)
sequenceT, sequenceS implementations, closes #914 (@gcanti)One column per quarter.
add reduce to FoldableComposition2C1 (@anilanar)
reduce to FoldableComposition2C1 (@anilanar)fix PipeableBifunctor definition (@gcanti)
PipeableBifunctor definition (@gcanti)chunksOf implementation, #897 (@gcanti)remove deprecated APIs (@gcanti)
Nothing published for this version
use default type parameters for constructors / lifting functions
use default type parameters for constructors / lifting functions
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
fix sequenceT, sequenceS implementations, ref #914 (@gcanti)
sequenceT, sequenceS implementations, ref #914 (@gcanti)fix PipeableBifunctor definition (@gcanti)
PipeableBifunctor definition (@gcanti)chunksOf implementation, fix #897 (@gcanti)add pointer to Eq for those looking at deprecated Setoid interface, fix #889 (@gcanti)
Eq for those looking at deprecated Setoid interface, fix #889 (@gcanti)fix Reader.of definition (@gcanti)
Reader.of definition (@gcanti)use default type parameters for constructors / lifting functions (@gcanti)
Since in v2 data types are no more implemented with classes, chainable APIs will be deprecated (in v1.20.0).
The goal of this release is to make the migration to v2 easier.
Since in v2 data types are no more implemented with classes, chainable APIs will be deprecated (in v1.20.0).
As an alternative, a pipe function is provided, along with suitable data-last top level functions (one for each deprecated method).
Example
Before
import * as O from 'fp-ts/lib/Option'
O.some(1)
.map(n => n * 2)
.chain(n => n === 0 ? O.none : O.some(1 / n))
.filter(n => n > 1)
.foldL(() => 'ko', () => 'ok')
After
import * as O from 'fp-ts/lib/Option'
import { pipe } from 'fp-ts/lib/pipeable'
pipe(
O.some(1),
O.map(n => n * 2),
O.chain(n === 0 ? O.none : O.some(1 / n)),
O.filter(n => n > 1),
O.fold(() => 'ko', () => 'ok')
)
In order to make easier to spot all the occurrences of chainable APIs without depending on @deprecated, which would force you to migrate in one shot, a custom tslint rule is provided (@obsolete).
Configuration
Add the following lines to your tslint.json to turn the @obsolete rule on:
{
+ "rulesDirectory": ["./node_modules/fp-ts/rules"],
"rules": {
+ "obsolete": true
}
}
Eq module (@gcanti)pipeable module form v2 (@gcanti)pipe function form v2 (@gcanti)flow function form v2 (@gcanti)Array
isNonEmpty (@Stouffi)IOEither
foldIO and foldIOEither (@bwlt)Record
record instance (@gcanti)mapWithIndex (@gcanti)reduceWithIndex (@gcanti)foldMapWithIndex (@gcanti)reduceRightWithIndex (@gcanti)hasOwnProperty (@gcanti)Map
updateAt (@gcanti)modifyAt (@gcanti)Ord
Ord a contravariant functor (@gcanti)MonadThrow definition (@gcanti)TraversableWithIndex
TraverseWithIndex2 definition (@gcanti)TraverseWithIndex2C definition (@gcanti)HKT
URI2HKT<n> in favour of URItoKind<n> (@gcanti)Type<n> in favour of Kind<n> (@gcanti)Setoid in favour of Eq (@gcanti)Applicative
when (@gcanti)getMonoid (@gcanti)Apply
applyFirst, use pipeable's apFirst (@gcanti)applySecond, use pipeable's apSecond (@gcanti)Array
catOptions in favour of compact (@gcanti)mapOptions in favour of filterMap (@gcanti)filter in favour of curried, data-last filter (@gcanti)partition in favour of curried, data-last partition (@gcanti)partitionMap in favour of curried, data-last partitionMap (@gcanti)fold / foldL in favour of foldLeft (@gcanti)foldr in favour of foldRight (@gcanti)take in favour of takeLeft (@gcanti)takeEnd in favour of takeRight (@gcanti)takeWhile in favour of takeLeftWhile (@gcanti)span in favour of spanLeft (@gcanti)drop in favour of dropLeft (@gcanti)dropEnd in favour of dropRight (@gcanti)dropWhile in favour of dropLeftWhile (@gcanti)findIndex in favour of curried, data-last findIndex (@gcanti)findFirst in favour of curried, data-last findFirst (@gcanti)findFirstMap in favour of curried, data-last findFirstMap (@gcanti)findLast in favour of curried, data-last findLast (@gcanti)findLastMap in favour of curried, data-last findLastMap (@gcanti)findLastIndex in favour of curried, data-last findLastIndex (@gcanti)insertAt in favour of curried, data-last insertAt (@gcanti)updateAt in favour of curried, data-last updateAt (@gcanti)deleteAt in favour of curried, data-last deleteAt (@gcanti)modifyAt in favour of curried, data-last modifyAt (@gcanti)rotate in favour of curried, data-last rotate (@gcanti)chop in favour of curried, data-last chop (@gcanti)split in favour of splitAt (@gcanti)chunksOf in favour of curried, data-last chunksOf (@gcanti)Chain
flatten, use pipeable's flatten (@gcanti)Const
Const constructor in favour of make (@gcanti)Contravariant
lift, use pipeable's contramap (@gcanti)Exception module is deprecated (@gcanti)Extend
duplicate, use pipeable's duplicate (@gcanti)Foldable2v
fold (@gcanti)sequence_, use traverse_ (@gcanti)oneOf (@gcanti)sum (@gcanti)product (@gcanti)elem (@gcanti)findFirst (@gcanti)min (@gcanti)max (@gcanti)toArray (@gcanti)Free module is deprecated (@gcanti)FreeGroup module is deprecated (@gcanti)function
Function* types, use FunctionN (@gcanti)Kleisli type (@gcanti)Cokleisli type (@gcanti)concat function, use Array's getSemigroup (@gcanti)compose function in favour of flow (@gcanti)pipe function in favour of flow (@gcanti)curried function (@gcanti)curry function (@gcanti)toString function, use Show type class (@gcanti)apply function (@gcanti)applyFlipped function (@gcanti)constIdentity function (@gcanti)phantom (@gcanti)or (@gcanti)and (@gcanti)on (@gcanti)BinaryOperator (@gcanti)Functor
lift, use pipeable's map (@gcanti)voidRight (@gcanti)voidLeft (@gcanti)flap (@gcanti)Validation
Validation module in favour of Either's:
getValidation (@gcanti)getValidationSemigroup (@gcanti)getValidationMonoid (@gcanti)Either
getCompactable, getFilterable in favour of getWitherable (@gcanti)IOEither
right in favour of rightIO (@gcanti)left in favour of leftIO (@gcanti)fromLeft in favour of left2v (@gcanti)right2v (@gcanti)IxIO module is deprecated (@gcanti)IxMonad module is deprecated (@gcanti)Map
insert in favour of insertAt (@gcanti)remove in favour of deleteAt (@gcanti)MonadThrow
fromOption (@gcanti)fromEither (@gcanti)Monoid
getArrayMonoid in favour of Array's getMonoid (@gcanti)Monoidal module is deprecated (@gcanti)NonEmptyArray
groupBy in favour of curried, data-last groupBy (@gcanti)findFirst in favour of Array's findFirst (@gcanti)findLast in favour of Array's findLast (@gcanti)findIndex in favour of Array's findIndex (@gcanti)findLastIndex in favour of Array's findLastIndex (@gcanti)insertAt in favour of curried, data-last insertAt (@gcanti)updateAt in favour of curried, data-last updateAt (@gcanti)modifyAt in favour of curried, data-last modifyAt (@gcanti)filter in favour of curried, data-last filter (@gcanti)filterWithIndex in favour of curried, data-last filterWithIndex (@gcanti)Ord
lessThan in favour of lt (@gcanti)greaterThan in favour of gt (@gcanti)lessThanOrEq in favour of leq (@gcanti)greaterThanOrEq in favour of geq (@gcanti)contramap arguments (@gcanti)Pair module is deprecated (@gcanti)Profunctor
lmap function (@gcanti)rmap function (@gcanti)ReaderTaskEither
right in favour of rightTask (@gcanti)left in favour of leftTask (@gcanti)fromReader in favour of rightReader (@gcanti)fromIO in favour of rightIO (@gcanti)fromLeft in favour of left2v (@gcanti)right2v (@gcanti)Record
collect in favour of curried, data-last collect (@gcanti)insert in favour of insertAt (@gcanti)remove in favour of deleteAt (@gcanti)pop in favour of curried, data-last pop (@gcanti)mapWithKey in favour of mapWithIndex (@gcanti)reduceWithKey in favour of reduceWithIndex (@gcanti)foldMapWithKey in favour of foldMapWithIndex (@gcanti)foldrWithKey in favour of reduceRightWithIndex (@gcanti)traverseWithKey in favour of traverseWithIndex (@gcanti)traverse in favour of traverse2v (@gcanti)filterWithIndex in favour of curried, data-last filterWithIndex (@gcanti)partitionMap in favour of curried, data-last partitionMap (@gcanti)partition in favour of curried, data-last partition (@gcanti)wither in favour of record.wither (@gcanti)wilt in favour of record.wilt (@gcanti)filterMap in favour of curried, data-last filterMap (@gcanti)partitionMapWithKey in favour of curried, data-last partitionMapWithIndex (@gcanti)partitionWithKey in favour of curried, data-last partitionWithIndex (@gcanti)filterMapWithKey in favour of curried, data-last filterMapWithIndex (@gcanti)filter in favour of curried, data-last filter (@gcanti)map in favour of curried, data-last map (@gcanti)foldMap in favour of curried, data-last foldMap (@gcanti)foldr in favour of reduceRight (@gcanti)StrMap module is deprecated (@gcanti)Task
delay in favour of delay2v (@gcanti)TaskEither
right in favour of rightTask (@gcanti)left in favour of leftTask (@gcanti)fromIO in favour of rightIO (@gcanti)fromLeft in favour of left2v (@gcanti)right2v (@gcanti)These
this_ in favour of left (@gcanti)that in favour of right (@gcanti)fromThese in favour of toTuple (@gcanti)theseLeft in favour of getLeft (@gcanti)theseRight in favour of getRight (@gcanti)isThis in favour of isLeft (@gcanti)isThat in favour of isRight (@gcanti)thisOrBoth in favour of leftOrBoth (@gcanti)thatOrBoth in favour of rightOrBoth (@gcanti)theseThis in favour of getLeftOnly (@gcanti)theseThat in favour of getRightOnly (@gcanti)Trace module is deprecated (@gcanti)Validation module is deprecated, use Either's getValidation (@gcanti)Writer
listens in favour of listens2v (@gcanti)censor in favour of censor2v (@gcanti)Zipper module is deprecated (@gcanti)deprecate NonEmptyArray.make in favour of cons (@gcanti)
NonEmptyArray definition (@gcanti)NonEmptyArray.make in favour of cons (@gcanti)use explicit concat function for getEndomorphismMonoid, #870 (@mlegenhausen)
concat function for getEndomorphismMonoid, #870 (@mlegenhausen)add absurd function, closes #847 (@gcanti)
absurd function, closes #847 (@gcanti)Don't set target: es6 in tsconfig.es6.json, fix #863 (@FruitieX)
target: es6 in tsconfig.es6.json, fix #863 (@FruitieX)remove reverse (mutable) from NonEmptyArray2v interface (@gcanti)
reverse (mutable) from NonEmptyArray2v interface (@gcanti)deprecate Array.filter, Array.partition in favour of Array.array.filter and Array.array.partition (@gcanti)
Bifunctor2C interface (@gcanti)Profunctor2C interface (@gcanti)Array<any> with Array<unknown> in FunctionN definition (@ta2gch)filter / partition (Filterable type class) (@gcanti)filterWithIndex / partitionWithIndex (FilterableWithIndex type class) (@gcanti)Array.filter, Array.partition in favour of Array.array.filter and Array.array.partition (@gcanti)make Type not assignable to Type , closes #536 (@gcanti)
Polish
Type<URI1, A> not assignable to Type<URI2, A>, closes #536 (@gcanti)deprecate liftA functions (@gcanti)
Show type class and related instances (@gcanti)fromNonEmptyArray2v to Zipper module (@DenisFrezzato)getOrElse / getOrElseL to TaskEither (@zanza00)NonEmptyArray2v module
modifyAt (@gcanti)copy (@gcanti)NonEmptyArray2v as official moduleliftA<n> functions (@gcanti)NonEmptyArray module (@gcanti)add findFistMap and findLastMap to Array module, closes #788 (@sledorze)
findFistMap and findLastMap to Array module, closes #788 (@sledorze)cons / snoc to NonEmptyArray2v module, closes #800 (@sledorze)Traced comonad, closes #798 (@gcanti)tryCatch to Validation module (@gcanti)FunctionN type alias (@ta2gch)MonadThrow and related instances (@gcanti)parseJSON / stringifyJSON to Either module (@gcanti)Magma (@gcanti)fromFoldableMap to Record module (@gcanti)snoc / cons in Array now return a NonEmptyArray (@sledorze)any with unknown in Console module (@gcanti)any with unknown in Trace module (@gcanti)Nothing published for this version
revert SequenceT* deletion and prevent distribution of conditional types in sequenceT, sequenceS, fix #790 (@gcanti)
SequenceT* deletion and prevent distribution of conditional types in sequenceT, sequenceS, fix #790 (@gcanti)Note. This version requires typescript@3.1+ (mapped tuples)
Note. This version requires typescript@3.1+ (mapped tuples)
Apply.sequenceS, closes #688 (@gcanti)function.tuple variadic (@gcanti)Semigroup.getTupleSemigroup variadic (@gcanti)Monoid.getTupleMonoid variadic (@gcanti)Ord.getTupleOrd variadic (@gcanti)Setoid.getTupleSetoid variadic (@gcanti)Ring.getTupleRing variadic (@gcanti)Apply.sequenceT variadic (@gcanti)NonEmptyArray2v module (type level non empty arrays), closes #735 (@gcanti)Add overloads to sequenceT to allow more arguments (up to 8) (@cdimitroulas)
sequenceT to allow more arguments (up to 8) (@cdimitroulas)deprecate StrMap.traverseWithKey in favour of strmap.traverseWithIndex (@gcanti)
StrMap.traverseWithKey in favour of strmap.traverseWithIndex (@gcanti)OptionT.getOptionT in favour of OptionT.getOptionT2vOptionT functions (@gcanti)EitherT.getEitherT in favour of EitherT.getEitherT2v (@gcanti)EitherT functions (@gcanti)ReaderT.getReaderT in favour of ReaderT.getReaderT2v (@gcanti)ReaderT functions (@gcanti)StateT.getStateT in favour of StateT.getStateT2v (@gcanti)StateT functions (@gcanti)Ord.getProductOrd / Ring.getProductRing in favour of Ord.getTupleOrd / Ring.getTupleRing (@gcanti)deprecate Setoid.getRecordSetoid in favour of Setoid.getStructSetoid (@gcanti)
Setoid.getRecordSetoid in favour of Setoid.getStructSetoid (@gcanti)Setoid.getProductSetoid in favour of Setoid.getTupleSetoid (@gcanti)deprecate Array.index in favour of Array.lookup (@gcanti)
Map module (@joshburgess)Record
string for the K type parameter (@gcanti)every (@gcanti)some (@gcanti)elem (@gcanti)function.constVoid (@leemhenson)Set
empty (@gcanti)foldMap (@gcanti)Reader.getSemigroup, Reader.getMonoid (@gcanti)NonEmptyArray
getSetoid (@MaximeRDY)NonEmptyArray.prototype.toArrayMap (@gcanti)NonEmptyArray.prototype.some (@gcanti)NonEmptyArray.prototype.every (@gcanti)StrMap
StrMap.prototype.every (@gcanti)StrMap.prototype.some (@gcanti)elem (@gcanti)Tree.elem (@gcanti)Array.index in favour of Array.lookup (@gcanti)NonEmptyArray.prototype.index in favour of NonEmptyArray.prototype.lookup (@gcanti)Record.isSubdictionary in favour of Record.isSubrecord (@gcanti)Semigroup.getDictionarySemigroup, Monoid.getDictionaryMonoid in favour of Record.getMonoid (@gcanti)Array.getArraySemigroup (@gcanti)Set.member in favour of Set.elem (@gcanti)Array.member in favour of Array.elem (@gcanti)Record / StrMap: fix withIndex names (@gcanti)Nothing published for this version
- New Feature - add Array.unzip (@user753) - add Group type class (@gcanti) - add FreeGroup module (@gcanti) - add These functions (@gcanti) - thisOrB
Array.unzip (@user753)Group type class (@gcanti)FreeGroup module (@gcanti)These functions (@gcanti)
thisOrBoththatOrBoththeseThistheseThatfromOptionsfromEithersupport for constrained domain in Record module, closes #685 (@gcanti)
Record module, closes #685 (@gcanti)Foldable2v.toArray (@gcanti)- Bug Fix - fix Tree.drawTree (@gcanti)
Tree.drawTree (@gcanti)array.map should be safe when executed with a binary function, fix #675 (@gcanti)
array.map should be safe when executed with a binary function, fix #675 (@gcanti)deprecate Set.difference in favour of difference2v (@gcanti)
Set.difference in favour of difference2v (@gcanti)Array.union (@gcanti)Array.intersection (@gcanti)Array.difference (@gcanti)Set.compact (@gcanti)Set.separate (@gcanti)Set.filterMap (@gcanti)getCompactableComposition (@gcanti)getFilterableComposition (@gcanti)chainFirst, chainSecond to TaskEither (@gcanti)NonEmptyArray.prototype.filterWithIndex (@gcanti)Record (@gcanti)
reduceWithKeyfoldMapWithKeyfoldrWithKeypartitionMapWithIndexpartitionWithIndexfilterMapWithIndexfilterWithIndexFunctorWithIndex type class (@MaximeRDY)
Array instance (@MaximeRDY)NonEmptyArray instance (@MaximeRDY)StrMap instance (@gcanti)getFunctorWithIndexComposition (@MaximeRDY)FoldableWithIndex type class (@gcanti)
Array instance (@gcanti)NonEmptyArray instance (@gcanti)StrMap instance (@gcanti)TraversableWithIndex type class (@gcanti)
Array instance (@gcanti)NonEmptyArray instance (@gcanti)StrMap instance (@gcanti)FilterableWithIndex type class (@gcanti)
Array instance (@gcanti)StrMap instance (@gcanti)typescript@3.2.1 (@gcanti)refine in favour of filter (@gcanti)
Array
refine in favour of filter (@gcanti)Either
.prototype.refineOrElse in favour of .prototype.filterOrElse (@gcanti).prototype.refineOrElseL in favour of .prototype.filterOrElseL (@gcanti)fromRefinement in favour of fromPredicate (@gcanti)Option
.prototype.refine in favour of .prototype.filter (@gcanti)fromRefinement in favour of fromPredicate (@gcanti)Record type in Record module (@gcanti)Array
takeWhilespanNonEmptyArray
.prototype.filterReaderTaskEither
fromPredicateRecord
filterSet
filterpartitionStrMap
filterTaskEither
.prototype.filterOrElse.prototype.filterOrElseLfromPredicateValidation
fromPredicatefix function.toString when input does not have Object on its prototype chain (@gcanti)
function.toString when input does not have Object on its prototype chain (@gcanti)ReaderTaskEither.tryCatch: add the environment as the second argument of the onrejected handler (@ascariandrea)
ReaderTaskEither.tryCatch: add the environment as the second argument of the onrejected handler (@ascariandrea)deprecate Either.tryCatch in favour of Either.tryCatch2v (@gcanti)
Either.tryCatch in favour of Either.tryCatch2v (@gcanti)IOEither.tryCatch in favour of IOEither.tryCatch2v (@gcanti)Strong type class (@gcanti)Choice type class (@gcanti)unknown type instead of {}, #539 (@gcanti)HKT4, URIS4, URI2HKT4, #555 (@babakness)NonEmptyArray enhancement #627 (@sledorze)
indexfindFirstfindLastfindIndexfindLastIndexinsertAtupdateAtfilterTaskEither
filterOrElse, filterOrElseL, #619 (@gcanti)Reader
Profunctor instance #634 (@gcanti)Strong instance (@gcanti)Choice instance (@gcanti)Category instance (@gcanti)Category4, Functor4, Profunctor4, Semigroupoid4, Strong4 (@gcanti)TaskEither.taskify with immutable arguments, #637 (@DenisFrezzato)backport https://github.com/gcanti/fp-ts/pull/637 (@gcanti)
deprecate Foldable in favour of Foldable2v (\*)
Foldable in favour of Foldable2v (*)Traversable in favour of Traversable2v (*)Array
chop function (@gcanti)split function (@gcanti)chunksOf function (@gcanti)takeEnd function (@gcanti)dropEnd function (@gcanti)makeBy function (@gcanti)repeat function (@gcanti)replicate function (@gcanti)findLastIndex function (@gcanti)comprehension (@gcanti)NonEmptyArray
length method (@gcanti)groupBy function (@gcanti)StrMap
empty constant (@gcanti)Task
TaskEither
attempt method (@gcanti)bracket function (@gcanti)foldTask method (@gcanti)foldTaskEither method (@gcanti)ReaderTaskEither
MonadIO module (@gcanti)MonadTask module (@gcanti)Date module (@gcanti)Foldable2v module + instances (@gcanti)Traversable2v module + instances (@gcanti)Record module (@gcanti)Array module (@gcanti)Array.member (@fozcodes)function.not test case (@gibbok)(*) Foldable and Traversable will be replaced with Foldable2v and Traversable2v implementations in fp-ts@2
add getSemigroup, getApplySemigroup, getApplyMonoid to TaskEither, https://github.com/gcanti/fp-ts/pull/563 (@mlegenhausen)
getSemigroup, getApplySemigroup, getApplyMonoid to TaskEither, https://github.com/gcanti/fp-ts/pull/563 (@mlegenhausen)increment and decrement functions, https://github.com/gcanti/fp-ts/pull/557 (@gcanti)Zipper module, https://github.com/gcanti/fp-ts/pull/558 (@gcanti)getMeetMonoid, getJoinMonoid, https://github.com/gcanti/fp-ts/pull/548 (@gcanti)Array.empty, https://github.com/gcanti/fp-ts/pull/556 (@gcanti)add module augmentation to Free, https://github.com/gcanti/fp-ts/pull/559 (@gcanti)
Free, https://github.com/gcanti/fp-ts/pull/559 (@gcanti)- New Feature - add IORef module (@gcanti)
IORef module (@gcanti)add refinement overloading to Array.findFirst, closes #522 (@gcanti)
Array.findFirst, closes #522 (@gcanti)deprecate Traversable.traverse (@raveclassic)
Array.foldr, Array.foldrL (@PierreCooper)Compactable type class and related instances (@raveclassic)Filterable type class and related instances (@raveclassic)Whitherable type class and related instances (@raveclassic)State.prototype.applyFirst, State.prototype.applySecond (@gcanti)Option.getRefinement (@gcanti)Foldable.traverse (@gcanti)Option.getApplySemigroup, Option.getApplyMonoid (@gcanti)Either.getSemigroup, Either.getApplySemigroup, Either.getApplyMonoid (@gcanti)Task.delay (@gcanti)NonEmptyArray.group, NonEmptyArray.groupSort (@MaximeRDY)Random.randomRange implementation (@gcanti)Set.partitionMap signature (@gcanti)StrMap.collect (@gcanti)Traversable.traverse (@raveclassic)Foldable.traverse_ (@gcanti)Applicative2C overloadings to Traversable.traverse (@gcanti)add missing readonly modifiers (@gcanti)
readonly modifiers (@gcanti)
BoundedJoinSemilatticeBoundedMeetSemilatticeHeytingAlgebraJoinSemilatticeMeetSemilatticenull, undefined in function.toString (@gcanti)Free.foldFree, fix #470 (@gcanti)Reader.local, ReaderTaskEither.local should be able to change the environment type (@gcanti)
Reader.local, ReaderTaskEither.local should be able to change the environment type (@gcanti)Reader.prototype.local, ReaderTaskEither.prototype.local (@gcanti)add NonEmptyArray.prototype.last (@raveclassic)
NonEmptyArray.prototype.last (@raveclassic)IOEither module (@leemhenson)orElse method to Either, Identity, Option (@raveclassic)Alt instance to TaskEither (@gcanti)NonEmptyArray.prototype.sort (@raveclassic)TaskEither.fromIOEither (@gcanti)applyFirst method to IO, Task, IOEither, TaskEither (@gcanti)ReaderTaskEither from examples into src (@leemhenson)NonEmptyArray.prototype.reverse (@raveclassic)TaskEither.fromPredicate (@leemhenson)Tree module (@gcanti)Either.filterOrElseL more general (@gcanti)Either.refineOrElse, Either.refineOrElseL (@gcanti)Either.fromRefinement (@gcanti)TaskEither.taskify (@dmechas)TaskEither.taskify (@gcanti)Writer.prototype.map lazy (@gcanti)example and link tags (@gcanti)Allow the usage of a custom Semigroup for StrMap.getMonoid (@mlegenhausen)
Semigroup for StrMap.getMonoid (@mlegenhausen)applySecond method to IO, Task, TaskEither, closes #418 (@gcanti)TaskEither.fromIO (@gcanti)Apply.sequenceT (@raveclassic)TaskEither.taskify, utility to convert callback-based node APIs, closes #422 (@gcanti)fix semigroup usage in Tuple.ap implementation (@gcanti)
Tuple.ap implementation (@gcanti)add getDictionarySemigroup, getObjectSemigroup to Semigroup (@raveclassic)
getDictionarySemigroup, getObjectSemigroup to Semigroup (@raveclassic)getDictionaryMonoid to Monoid (@raveclassic)Setoid.setoidDate and Ord.ordDate (@mlegenhausen)StrMap#filter (@mlegenhausen)Apply.getSemigroup, Applicative.getMonoid (@gcanti)BooleanAlgebraBoundedDistributiveLatticeBoundedJoinSemilatticeBoundedLatticeBoundedMeetSemilatticeDistributiveLatticeHeytingAlgebraJoinSemilatticeMeetSemilatticeTravserable.sequence overloadings (@gcanti)getObjectSemigroup in StrMap.concat (@gcanti)add NonEmptyArray.prototype.min and NonEmptyArray.prototype.max (@raveclassic)
Array.uniq (@alex-ketch)NonEmptyArray.prototype.min and NonEmptyArray.prototype.max (@raveclassic)refine method to Option, closes #396 (@wmaurer)Ord.getDualOrd (@gcanti)Monad2C and Monad3C to OptionT, closes #379 (@gcanti)TaskEither.fromLeft (@gcanti)listen, pass, listens, censor to Writer (@gcanti)Option.fromRefinement (@gcanti)Array.sortBy, Array.sortBy1 (@gcanti)Either.fromOptionL, closes #384 (@gcanti)Either.filterOrElse, Either.filterOrElseL, closes #382 (@gcanti)StrMap.reduce (@gcanti)Semigroup.fold (@gcanti)Make TaskEither an instance of BiFunctor (@teves-castro)
TaskEither an instance of BiFunctor (@teves-castro)EitherT.bimap (@teves-castro)partitionMap to Set (@sledorze)getOrd to Option (@sledorze)partition to Set (@sledorze)contramap to Setoid (@sledorze)getOrd to Array (@sledorze)chain to Set (@sledorze)map to Set (@sledorze)fromArray to Set (@sledorze)StateT.fromState (@gcanti)StateT.liftF (@gcanti)ReaderT.fromReader (@gcanti)Alt instance of Validation (@sledorze)EitherT.chain signature (@gcanti)Type* in EitherT1, EitherT2 (@gcanti)Type* in StateT1, StateT2 (@gcanti)Type* in ReaderT1, ReaderT2 (@gcanti)readonly modifier to type classes properties (@gcanti)lefts, rights and mapOption (@sledorze)folds) (@sledorze)URIS3 overloadings to StateT (@gcanti)URIS3 overloadings to ReaderT (@gcanti)Your coding agent can read these notes before it upgrades. Set up the MCP server →