All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
ReaderT#ask
, a static factory method for returning an identityReaderT
- nested
DropWhile
s no longer incorrectly deforest using disjunction
5.4.0 - 2021-09-17
Absent
folds short-circuit on the firstnothing()
EitherMatcher#isLeftThat/isRightThat
support contravariant bounds on their delegates
IterateT#runStep
, a method used to run a single step of an IterateT without the contractual guarantee of emitting a value or reaching the endThese#fromMaybes :: Maybe a -> Maybe b -> Maybe (These a b)
EitherMatcher#isLeftOf/isRightOf
for asserting equality
WriterT
now keeps an immediate reference to the embedded monad'spure
5.3.0 - 2020-12-07
IterateT#unfold
now only computes a singlePure
for the given inputReaderT#fmap
andStateT#fmap
avoid unnecessary calls topure
MaybeT
implementsMonadError
$
, function application represented as a higher-orderFn2
Fn1#withSelf
, a static method for constructing a self-referencingFn1
HNil/SingletonHList/TupleX#snoc
, a method to add a new last element (append to a tuple)Tuple2-8#init
, for populating aTupleN
with all but the last element
IterateT#trampolineM
now yields and stages all recursive result values, rather than prematurely terminating on the first termination resultIterateT#flatMap
is now stack-safe regardless of how many consecutive emptyIterateT
s are returned and regardless of whether the monad is strict or lazy or internally trampolined
5.2.0 - 2020-02-12
HList#cons
static factory method auto-promotes to specializedHList
if there is oneEitherT
gains aMonadError
instance
MergeHMaps
, aMonoid
that mergesHMap
s by merging the values via key-specifiedSemigroup
sId#id
overload that accepts an argument and returns itMaybeT#or
, choose the firstMaybeT
that represents an effect aroundjust
a valueMaybeT#filter
, filter aMaybe
inside an effectStateMatcher, StateTMatcher, WriterTMatcher
ReaderT#and
, category composition betweenReaderT
instances:(a -> m b) -> (b -> m c) -> (a -> m c)
IterateT
,ListT
done rightComparison
, a type-safe sum ofLT
,EQ
, andGT
orderingsCompare
, a function taking aComparator
and returning aComparison
Min/Max/...With
variants for inequality testing with aComparator
5.1.0 - 2019-10-13
- All monad transformers that can support composable parallelism do support it
Writer
, the writer monadEndoK
, a monoid formed under endomorphism for any monadAutoBracket
, a specialized form ofBracket
forAutoCloseable
that closes the resource during cleanup
SafeT#zip
is now stack-safe regardless of the underlying monad'szip
implementation
Force
, in favor if traversing into anIO
and explicitly running it
5.0.0 - 2019-09-23
- Breaking Change:
MonadT
is now witnessed by a parameter for better subtyping, and no longer requires a commonrun
interface; eachrun
method is nowrunXXXT()
, whereXXX
is the name of the transformer in question - Breaking Change:
Applicative#zip
and derivatives evaluate from left to right now across the board. - Breaking Change:
testsupport.EquatableM
replaced withEquivalence
Alter
now merely requires anFn1
instead of an explicitEffect
IO
now internally trampolines all forms of composition, includinglazyZip
; sequencing very large iterables ofIO
will work, if you have the heap, and retain parallelization inflection points
MonadRec
, monads that support a stack-safetrampolineM
method with defaults for all exported monadsMonadError
, monads that can be thrown to and caught from, with defaults forIO
,Either
,Maybe
, andTry
MonadBase
, an interface representing lifting infrastructure forMonad
sMonadReader
andMonadWriter
, general interfaces for reading from an environment and accumulating resultsSafeT
, a stack-safe monad transformer for anyMonadRec
ReaderT
, the transformer for the reader monadWriterT
, a monad transformer for an accumulation and a valueStateT
, theState
monad transformerLift
, an existentially-quantified lifting function for someMonadBase
typeIO#interruptible
, for wrapping anIO
in a thread interruption checkIO#monitorSync
, for wrapping anIO
in asynchronized
block on a given lock objectIO#pin
, for pinning anIO
to anExecutor
without yet executing itIO#fuse
, for fusing the fork opportunities of a givenIO
into a single linearizedIO
IO#memoize
, for memoizing anIO
by caching its first successful resultUntil
, for repeatedly executing anIO
until its result matches a predicateOptic#andThen
,Optic#compose
, and other defaults addedPrism#andThen
,Prism#compose
begets anotherPrism
Prism#fromPartial
public interfacesTuple2-8#fromIterable
, for populating aTupleN
with the firstN
elements of anIterable
Fn2#curry
, for converting anFn1<Tuple2<A,B>,C>
to anFn2<A,B,C>
EquivalenceTrait
, a traitorTrait
to make it easier to test properties of type-classes with a separate equivalence relation
Peek
,Peek2
,Maybe#peek
, andEither#peek
in favor of explicitly matching intoIO
and running itIO#exceptionally
in favor ofIO#catchError
(fromMonadError
)
4.0.0 - 2019-05-20
- Breaking Change:
IO
is now sealed and moved to its own package. Most previous constructions using the static factory methods should continue to work (by simply targetingSupplier
now instead of an anonymousIO
), but some might need to be reworked, and subtyping is obviously no longer supported. - Breaking Change: Breaking all dependency on
java.util.function
types across the board. AllFn*
types target methods now support throwingThrowable
;apply
is now defaulted and will simply bypass javac to throw checked exceptions as if they were unchecked. AllChecked
variants have been eliminated as a consequence, as they are no longer necessary. Also, straggler functions likePartial2/3
that only existed to aid in partial application of non-curried functions are now superfluous, and have also been eliminated. - Breaking Change:
FoldRight
now requiresLazy
as part of its interface to support short-circuiting operations - Breaking Change: Eliminated all raw types and java11 warnings. This required using capture in unification parameters for Functor and friends, so nearly every functor's type-signature changed.
- Breaking Change:
Strong
is now calledCartesian
to better reflect the type of strength - Breaking Change: new Optic type hierarchy more faithfully encodes profunctor constraints on optics, new
Optic
type is now the supertype ofLens
andIso
, andlens
package has been moved tooptics
- Breaking Change:
Try
andEither
no longer preserveThrowable
type since it was inherently not type-safe anyway; Try is therefore no longer aBifunctor
, andorThrow
can be used to declare checked exceptions that could be caught by corresponding catch blocks IO
is now stack-safe, regardless of whether the composition nests linearly or recursively
Lazy
, a monad supporting stack-safe lazy evaluationLazyRec
, a function for writing stack-safe recursive algorithms embedded inLazy
Applicative#lazyZip
, for zipping two applicatives in a way that might not require evaluation of one applicativeMonadT
, a general interface representing monad transformersMaybeT
, a monad transformer forMaybe
EitherT
, a monad transformer forEither
IdentityT
, a monad transformer forIdentity
LazyT
, a monad transformer forLazy
Endo
, a monoid formed byFn1
under compositionState
, the stateMonad
Downcast
, a function supporting unchecked down-castingCocartesian
, profunctorial strength in cocartesian coproduct termsPrism
, anOptic
that is nearly anIso
but can fail in one directionMarket
,Tagged
, profunctors supporting opticsRe
for viewing anOptic
in one direction reliablyPre
for viewing at most one value from anOptic
in one directionSideEffect
, for representing side-effects runnable byIO
IO#safe
, mapping anIO<A>
to anIO<Either<Throwable, A>>
that will never throwIO#ensuring
, likefinally
semantics forIO
sIO#throwing
, for producing anIO<A>
that will throw a givenThrowable
when executedBracket
, for bracketing anIO
operation with a mapping operation and a cleanup operation
3.3.0 - 2019-02-18
MergeMaps
, aMonoid
onMap
formed byMap#merge
CheckedEffect
is now aCheckedFn1
CheckedSupplier
is now aCheckedFn1
CheckedFn1
now overrides all possible methods with covariant return typeMapLens#asCopy
has overload taking copy functionMapLens#valueAt
has overload taking copy functionSortWith
for sorting anIterable
given aComparator
over its elementsIO#externallyManaged
, for supplying anIO
with externally-managed futures- test jar is now published
Monad#join
static alias forflatMap(id())
Effect#effect
static factory method takingFn1
IO#unsafePerformAsyncIO
overloads for runningIO
s asynchronouslyIO
s automatically encode parallelism in compositionIO#exceptionally
for recovering from failure duringIO
operationOptic
, a generic supertype for all profunctor optics
- issue where certain ways to compose
Effect
s unintentionally nullified the effect
AddAll
semigroup, deprecated in previous release- Dyadic
Either#flatMap()
, deprecated in previous release
3.2.0 - 2018-12-08
- Breaking Change:
Difference
andIntersection
no longer instances ofSemigroup
and moved tofunctions.builtin.fn2
package - Breaking Change:
Absent
moved tosemigroup.builtin
package - Breaking Change:
Effect#accept()
is now the required method to implement in the functional interface - Breaking Change:
Fn0#apply()
is now the required method to implement in the functional interface - Breaking Change:
GTBy
,GT
,LTBy
,LT
,GTEBy
,GTE
,LTEBy
, andLTE
take the right-hand side first for more intuitive partial application - Breaking Change:
Effect
now returns anIO
RightAny
overload returnsMonoid
- monoids now all fold with respect to
foldMap
- monoid folding now implicitly starts with the identity, regardless of iterable population
Concat
monoid can now fold infinite iterables- all
Function<? super XXX, Boolean>
are nowFunction<? super XXX, ? extends Boolean>
for better compatibility Either#diverge
returns aChoice3
Maybe
is now aCoProduct2
ofUnit
andA
Fn0
now additionally implementsCallable
CheckedRunnable
is anIO<Unit>
Predicate#predicate
static factory methodProduct2-8
left/right rotation methodsTuple2-8
specializations of left/right product rotationCheckedEffect
, anEffect
variant that can throw checked exceptionsCheckedFn1#checked
, convenience static factory method to aid inferenceLiftA3-8
, higher-arity analogs toLiftA2
Alter
, for applying anEffect
to an input and returning it, presumably alteredClamp
, for clamping a value between two boundsBetween
, for determining if a value is in a closed intervalStrong
, profunctor strengthIO
monadRunAll
semigroup and monoid instance forIO<A>
AddAll
semigroup, in favor of the monoid that no longer mutates any argument- Dyadic
Either#flatMap()
, in favor ofEither#match
3.1.0 - 2018-07-16
Fn3-8
static factory overloads to aid in coercing lambdas- Adding composition guarantees to
LensLike
CmpEqBy
,CmpEq
,GTBy
,GT
,LTBy
,LT
,GTEBy
,GTE
,LTEBy
, andLTE
inequality checksMinBy
,MaxBy
,Min
, andMax
semigroupsProduct2-8
interfaces, representing general product typesUnion
, a monoid that behaves like a lazy set union onIterable
sDifference
, a semigroup that behaves like a partially lazy set difference onIterable
sLambdaMap
, extension point forj.u.Map
, similar toLambdaIterable
Sequence#sequence
overloads forj.u.Map
that traverse via intermediateLambdaMap
instancesIntersection
, a semigroup that behaves like a lazy set intersection onIterable
sFn0
, a function fromUnit
to some valueFn1#thunk
, producing anFn0
Absent
, a monoid overMaybe
that is absence biasedRateLimit
, a function that iterates elements from anIterable
according to some rate limitTry#withResources
,Try
's expression analog to Java 7's try-with-resources statementOccurrences
, for counting the occurrences of the members of anIterable
Effect
, anFn0
returningUNIT
Noop
, a no-opEffect
Fn1#widen
, add an ignored argument to the beginning of any function to raise its arity by one
Tuple2-8
now implementProduct2-8
Into
now acceptsMap.Entry
Into3-8
now accept a product of the same cardinality, instead of requiring a tupleCoProduct2-8#project
now return generalized productsChoice2-8#project
return tuplesliftA2
receives more parameters to aid inferenceCompose#getCompose
now supports inference
MapLens#mappingValues
, deprecated in a prior releaseCollectionLens#asSet
, deprecated in a prior releaseCollectionLens#asStream
, deprecated in a prior release
3.0.3 - 2018-05-27
Lens#toIso
, for converting a lens to an isoHMap#hMap
overloads up to 8 bindings deepSchema
, schemas for extracting multiple values fromHMap
s by aggregatingTypeSafeKey
s
- Deforested iterables execute in intended nesting order, where essential
3.0.2 - 2018-05-21
IterableLens#mapping
, anIso
that maps values
TypeSafeKey.Simple
now has a default#apply
implementation
- mapped
TypeSafeKey
instances can be used for initial put in anHMap
, and the base key can be used to retrieve them - Merged pull request fixing issue storing values at mapped
TypeSafeKey
insingletonHMap
3.0.1 - 2018-05-13
ToMap
accepts anIterable
covariant inMap.Entry
RecursiveResult#invert
is also aRecursiveResult
First
/And
/Or
monoids all utilize short-circuitingMonoid#foldLeft/foldRight
delegate toMonoid#reduceLeft/reduceRight
, respectively
Upcast
for safely casting up a type hierarchySetLens
, lenses operating onSet
sToArray
, for convertingIterable<A>
toA[]
3.0.0 - 2018-05-04
- Breaking Change:
Sequence
now has two more type parameters to aid in inference - Breaking Change:
Traversable#traverse
now has three more type parameters to aid in inference - Breaking Change:
Monad#zip
now forcesm a -> b
beforem a
in defaultApplicative#zip
implementation; this is only breaking for types that are sensitive to computation order (the resulting values are the same) - Breaking Change:
TypeSafeKey
is now dually parametric (single parameter analog is preserved inTypeSafeKey.Simple
) Bifunctor
is now aBoundedBifunctor
where both parameter upper bounds areObject
Peek2
now accepts the more generalBoundedBifunctor
Identity
,Compose
, andConst
functors all have bettertoString
implementationsInto3-8
now supports functions with parameter varianceHListLens#tail
is now covariant inTail
parameter- More functions now automatically deforest nested calls (
concat
cons
,cycle
,distinct
,drop
,dropwhile
,filter
,map
,reverse
,snoc
,take
,takewhile
,tail
) Flatten
callsIterator#hasNext
less aggressively, allowing for better lazinessLens
subtypesLensLike
View
/Set
/Over
now only requireLensLike
HMap#keys
now returns aSet
HMap#values
now returns aCollection
Unfoldr
is now lazier, deferring all computations untilhasNext/next
callsPresent
is now a singleton
BoundedBifunctor
, aBifunctor
super type that offers upper bounds for both parametersTry
, aMonad
representing an expression-like analog oftry/catch/finally
CheckedRunnable
, theRunnable
counterpart toCheckedSupplier
that can throw checked exceptionsUnit
, the lambda analog toVoid
, except actually inhabited by a singleton instanceKleisli
, the abstract representation of aKleisli
arrow (Monad#flatMap
) as anFn1
These
, aCoProduct3
ofA
,B
, orTuple2<A,B>
Span
, for splitting anIterable
into contiguous elements matching a predicateMagnetizeBy
andMagnetize
, for grouping elements by pairwise predicate testsBoth
, for dually applying two functions and producing aTuple2
of their resultsLens#both
, for dually focusing with two lenses at onceIfThenElse
, an expression form forif
statementsCheckedRunnable
andCheckedSupplier
conversion and convenience methodsLensLike
, common capabilities that make a type usable as if it were aLens
Iso
, isomorphisms between two types (invertible functions that are also lenses)Exchange
, aProfunctor
that can extract the morphisms from anIso
HMapLens
, lenses focusing onHMap
MapLens#mappingValues(Iso)
, a lawful lens that maps the values of aj.u.Map
Under
, the inverse ofOver
forIso
TypeSafeKey
is anIso
and supports mappingTypeSafeKey.Simple
, the single parameter version ofTypeSafeKey
Either#trying
overloads that acceptCheckedRunnable
MapLens#mappingValues(Function)
is now deprecated in favor of the overload that takes anIso
2.1.1 - 2018-01-16
- Breaking Change: Moved
Trampoline
andRecursiveResult
to better package
2.1.0 - 2018-01-14
- Breaking Change:
CollectionLens#asSet
is now lawful and preserves new incoming values in the update set - Breaking Change:
IterableLens#head
is now aLens.Simple<Iterable<A>, Maybe<A>>
and is lawful - Breaking Change:
ListLens#elementAt
is now aLens.Simple<List<X>, Maybe<X>>
supporting defensive copies - Breaking Change:
MapLens#valueAt
is now aLens.Simple<Map<K,V>, Maybe<V>>
supporting defensive copies MapLens#keys
now uses defensive copies and does not alter the focused on mapMapLens#values
now uses defensive copies and does not alter the focused on mapMapLens#inverted
now uses defensive copies and does not alter the focused on mapHListLens#head
is now covariant in the tail of bothS
andT
Predicate#contraMap
is now covariant in its return typeBiPredicate#contraMap
andBiPredicate#diMapL
are now both covariant in their return types
Fn3#fn3
andFn4#fn4
static factory methodsFn5
throughFn8
Tuple5#into
Tuple6
throughTuple8
CoProduct6
throughCoProduct8
andChoice6
throughChoice8
CoProduct5#diverge
andChoice5#diverge
Into3
throughInto8
, for applying aTuple*
to anFn*
Times
, for successively accumulating a result by iterating a function over a value some number of timesSlide
, for "sliding" a window of some number of elements across anIterable
Either#filter
overload supporting a function fromR
toL
in the failing predicate caseCollectionLens#asSet(Function)
, a proper analog ofCollectionLens#asSet()
that uses defensive copiesCollectionLens#asStream(Function)
, a proper analog ofCollectionLens#asStream()
that uses defensive copies- Explicitly calling attention to all unlawful lenses in their documentation
Peek
andPeek2
, for "peeking" at the value contained inside any givenFunctor
orBifunctor
with given side-effectsTrampoline
andRecursiveResult
for modeling primitive tail-recursive functions that can be trampolined
Either#toOptional
, deprecated in previous releaseEither#fromOptional
, deprecated in previous releasesequence
overloads supportingOptional
, deprecated in previous releaseOptionalLens
, deprecated in previous releaseTraversableIterable
, deprecated in previous releaseTraversables
, deprecated in previous release
CollectionLens#asSet()
in favor ofCollectionLens#asSet(Function)
CollectionLens#asStream()
in favor ofCollectionLens#asStream(Function)
2.0.0 - 2017-11-13
- Breaking Change:
java.util.Optional
replaced withMaybe
across the board Profunctor#diMap/L/R
parameters allow varianceEither#toOptional
no longer allowsnull
values in the right side, and is now in sync with CoProduct#projectBUnfoldr
allows variance on input
CoProductN#embed
no longer eagerly invokes functionsPrependAll
now only createsO(1)
Iterable
s instead ofO(3n + 1)
Monad
arrives. The followingApplicative
s are now alsoMonad
:Lens
Const
Tuple*
Choice*
Identity
Either
Fn*
LambdaIterable
Maybe
SingletonHList
Force
, for forcing iteration of anIterable
to perform any side-effectsSnoc
, for lazily appending an element to the end of anIterable
Coalesce
, for folding anIterable<Either<L, R>>
into anEither<Iterable<L>, Iterable<R>>
And
,Or
, andXor
all gainBiPredicate<Boolean, Boolean>
propertiesLambdaIterable
, an adapterIterable
that support lambda typesMaybe
, lambda's analog ofjava.util.Optional
conforming to all the lambda typesContravariant
, an interface representing functors that map contravariantly over their parametersProfunctor
extendsContravariant
Tails
, for iterating all the tail element subsequences of anIterable
Inits
, for iterating all the initial element subsequences of anIterable
Init
, for iterating all but the last element of anIterable
CatMaybes
, for unwrapping the present values in anIterable<Maybe<A>>
to produce anIterable<A>
Fn1#then(Function<? super B, ? extends C>)
, deprecated in previous releaseFn1#adapt(Function<A, B> function)
, deprecated in previous releaseFn2#adapt(BiFunction<A, B, C> biFunction)
, deprecated in previous release
Traversables
and all methods therein, in favor of eitherLambdaIterable
orMaybe
TraversableOptional
in favor ofMaybe
TraversableIterable
in favor ofLambdaIterable
Sequence
overloads supportingOptional
in favor of convertingOptional
toMaybe
and then sequencingEither#toOptional
andEither#fromOptional
in favor of itsMaybe
counterparts
1.6.3 - 2017-09-27
- Loosening variance on
Fn2#fn2
andFn1#fn1
ConcatenatingIterator
bug where deeply nestedxs
skip elements
Fn1#then
in favor ofFn1#andThen
(redundant)Fn1#adapt
in favor ofFn1#fn1
(rename)Fn2#adapt
in favor ofFn2#fn2
(rename)
Fn1#andThen
overload to support composition withBifunction
Fn1#compose
overload to support composition withBifunction
andFn2
LiftA2
to lift and apply aBifunction
to twoApplicative
sFlatten
to lazily flatten nestedIterable<Iterable<A>>
s toIterable<A>
Replicate
, short-hand composition oftake
andrepeat
Distinct
to produce anIterable
of distinct values in anotherIterable
Sort
andSortBy
for eagerly, monolithically sortingIterable
s and producingList
sIterableLens
, general lenses overIterable
Xor
, a monoid representing logical exclusive-or
1.6.2 - 2017-08-20
- Removing need for various suppressed unchecked warnings in
ChoiceN
types HList
abstract super type loses both unnecessary parameters
- ClassCastException
BiPredicate.flip
Uncons
, for destructuring anIterable
into its head and tailCompose
semigroup and monoid formed overCompletableFuture
Monoid
andSemigroup
both preserve type specificity throughflip
calls
1.6.1 - 2017-06-17
- Loosening visibility on
Traversables
methods topublic
1.6.0 - 2017-06-04
Functor
,Bifunctor
, andProfunctor
(as well as all instances) get a unification parameterIdentity
supports value equalityConst
supports value equalitypartition
now only requires iterables ofCoProudct2
CoProductN
s receive a unification parameter, which trickles down toEither
andChoice
sConcat
now represents a monoid forIterable
; previousConcat
semigroup and monoid renamed to more appropriateAddAll
Lens
is now an instance ofProfunctor
Either#invert
is pulled up intoCoProduct2
and additionally specialized forChoice2
CoProductN#embed
not
, used for negating predicate functionsempty
, used to test if an Iterable is emptygroupBy
, for folding an Iterable into a Map given a key functionApplicative
arrives; all functors gain applicative propertiesTraversable
arrives;SingletonHList
,Tuple*
,Choice*
,Either
,Identity
, andConst
gain traversable propertiesTraversableOptional
andTraversableIterable
for adaptingOptional
andIterable
, respectively, toTraversable
sequence
for wrapping a traversable in an applicative during traversalCompose
, an applicative functor that represents type-level functor composition
1.5.6 - 2017-02-11
CoProductN.[a-e]()
static factory methods moved to equivalentChoiceN
class. Coproduct interfaces now solely represent methods, no longer have anonymous implementations, and no longer require aFunctor
constraint
ChoiceN
types, representing concrete coproduct implementations that are alsoFunctor
andBiFunctor
toMap
,last
,cons
,prependAll
,intersperse
Tuple2/3/4#into
, for applying the values in a tuple as positional arguments to a function.First
andLast
monoids overOptional
And
andOr
monoids overBoolean
1.5.5 - 2016-12-17
- semigroups and monoids moved under
fn2
package
CoProductN#project
, to project disjoint union types into tuples ofOptional
valuesCoProductN#converge
, to drop the magnitude of a coproduct down by one typetoCollection
andsize
1.5.4 - 2016-11-27
Fn1/2#adapt
to switch between lambda andjava.util.function
types more easilyeq
,head
,find
, andtail
BiPredicate
Monoid#foldMap
HMap#toMap
to go from a heterogeneous map to ajava.util.Map
1.5.3 - 2016-11-06
Semigroup
andMonoid
Either#invert
partition
- Generalized coproducts implemented as
CoProduct2
throughCoProduct5
Either
is now aCoProduct2
1.5.2 - 2016-09-24
Lens
static factory method renaming
- Heterogeneous list indexes arrive via
Index
1.5.1 - 2016-08-30
- Independent
Lens
parameter mapping viamapS
,mapT
,mapA
, andmapB
1.5 - 2016-08-28
- Initial lens support with
Lens
andSimpleLens
types andview
,set
, andover
functions Const
andIdentity
functorsEither#toOptional
HMap#remove
andHMap#removeAll
1.4 - 2016-08-08
- All function input values become
java.util.function
types, and all function output values remain lambda types, for better compatibility
1.3 - 2016-07-31
Profunctor
inheritance hierarchy- Renaming
Identity
toId
Monadic/Dyadic/TriadicFunction
is nowFn1/2/3
HList
specializations support random access lookup
1.2 - 2016-06-27
Tuple
s moved underHList
as specialized subtypes
Either#peek
HMap
, heterogeneous mapsTuple2
is now also aMap.Entry
1.1 - 2016-06-21
- Better interoperability between lambda and
java.util.function
types
scanLeft
HList
, heterogeneous lists- Added up to
Tuple5
Either
, specialized coproduct with success/failure semantics
1.0 - 2015-12-29
- Initial implementation of first-class curried functions
all
,any
,cartesianProduct
,cycle
,drop
,dropWhile
,filter
,foldLeft
,foldRight
,inGroupsOf
,map
,partial2
,partial3
,reduceLeft
,reduceRight
,repeat
,take
,takeWhile
,unfoldr
Monadic/Dyadic/TriadicFunction
,Predicate
,Tuple2
,Tuple3
Functor
,BiFunctor
,ProFunctor