Welcome! Got a question? Do you have -Ypartial-unification turned on? Other FAQs: http://typelevel.org/cats/faq.html
MonadTrans
lift
cannot lift that sort of non algebraic operation (and you need more complex machinery)
Producer a m r
which is a little weird but I guess that's like fs2's Pull
streamly
has, but then streamly suffers in the other use case
Stream
and Pull
(which are related to each other ofc)
Pull
is a monad in the returned type, and can be used for stateful streaming, and Stream
is a monad in the emitted type, and can be used for control flow
Stream f a = Pull f a ()
Stream
and Pull
seemed like a wart (although at the time it was obscured by a bunch of other stuff like Handle
), but in truth it's one of the best design decisions of the whole library
(A, B) => C
into A => B => C
(A => B) => (A => (B => C)) => (A => C)
A =>
into F[_]
F[B] => F[B => C] => F[C]
F[A => B] => F[A] => F[B]
, which is the key signature of the Apply
typeclass