A Producer
is some monadic action that can yield
values for downstream consumption:
type Producer b = Proxy X () () b
yield :: Monad m => a -> Producer a m ()
For example:
naturals :: Monad m => Producer Int m ()
naturals = each [1..] -- each is a utility function exported by Pipes
We can of course have Producer
s that are functions of other values too:
naturalsUntil :: Monad m => Int -> Producer Int m ()
naturalsUntil n = each [1..n]