supply-chain (hackage): Job is a free monad, plus a little extra. It is parameterized on two type constructors: one for dynamic effects, and one for static effects. The Vendor type is similar to job, but a vendor can also respond to requests, and thus it has two dynamic interfaces: one upstream and one downstream. We can connect vendors to jobs or to other vendors, creating a pipeline (or "supply chain", if you like) along the dynamic interfaces.
Keywords: apache|library|monads|streaming|haskell|haskell-library