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,leftFlatTaptoEitherOpssyntax 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]
flatTapautomatically comes fromFlatMapsyntax. 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/IorTneedbiFlatMapwith all thesemi-/sub-/-F/-Tapversions?
All changes are binary compatible. All done except for open questions. Tests to be written.
So close...