Specialized Monad Transformer instances for better performance
Clone or download
Luka Jacobowitz
Latest commit 51d091e Mar 25, 2018



This library defines specializations for certain monad transformers to make them more performant. Currently monad transformers in Scala are extremely slow compared to their Haskell counterparts. Part of this performance penalty is the fact that monad transformers are extremely general and allow us to stack any amounts of transformers on top of each other. The idea in this library is to use specialited transformers that only work with very specific underlying monads to improve performance. These new "transformers" are still polymorphic on their F type, but only work when the given F defines instances for the various cats-effect type classes. E.g. ReaderEff[F, R, A] will only have an instance of ApplicativeAsk if F has an instance of cats.effect.Sync.


Right now the only transformers are ReaderEff and EitherEff, both are more specific versions of ReaderT (Kleisli) and EitherT respectively. Future versions should include transformers like StateEff, WriterEff as well as combinations such as ReaderEitherEff or EitherStateEff.