cats
cats copied to clipboard
Add missing semi-/sub-/-F/-Tap versions of flatMap to monad transformers
Monad transformers lack some semi-
/sub-
/-F
/-Tap
versions of flatMap
that free a user from manual lifting or mapping.
I find the following items reasonable for implementation as to make structures and transformers more consistent:
- OptionT:
- [x] add member methods
flatTap
,flatTapF
,semiflatTap
,subflatTap
- [x] add member methods
- Either:
- [x] add extensions
flatTap
,leftFlatTap
toEitherOps
syntax class
- [x] add extensions
- EitherT:
- [x] add member methods
leftFlatMapF
,leftSubflatMap
- [x] add member methods
flatTap
,flatTapF
,semiflatTap
,subflatTap
- [x] add member methods
leftFlatTap
,leftFlatTapF
,leftSemiflatTap
,leftSubflatTap
- [x] add member methods
biSemiflatTap
- [x] add member methods
- Ior:
- [x] add member methods
leftFlatMap
- [x] add member methods
flatTap
,leftFlatTap
- [x] add member methods
- IorT:
- [x] add member methods
leftFlatMapF
,leftSubflatMap
- [x] add member methods
flatTap
,flatTapF
,semiflatTap
,subflatTap
- [x] add member methods
leftFlatTap
,leftFlatTapF
,leftSemiflatTap
,leftSubflatTap
- [x] add member methods
- IdT:
- [x] add member methods
flatTap
,flatTapF
- [x] add member methods
- WriterT:
- [x] add member methods
flatMapF
,semiflatMap
,subflatMap
- [x] add member methods
flatTap
,flatTapF
,semiflatTap
,subflatTap
- [x] add member methods
- Kleisli:
- [x] add member methods
flatTap
,flatTapF
- [x] add member methods
- IndexedStateT:
- [x] add member methods
flatTap
,flatTapF
- [x] add member methods
- IndexedReaderWriterStateT:
- [x] add member methods
flatTap
,flatTapF
- [x] add member methods
Open questions:
- [x]
flatTap
automatically comes fromFlatMap
syntax. For some transformers it has a special implementation (e.g. for EitherT), for others it is standard (e.g. for OptionT). Should we add it to the latter for symmetry and consistency? (Added) - [ ] EitherT has
biSemiflatMap
. DoEither
/EitherT
/Ior
/IorT
needbiFlatMap
with all thesemi-
/sub-
/-F
/-Tap
versions?