{"repo":"clj-commons/manifold","free":true,"listed":false,"github":"https://github.com/clj-commons/manifold","clone":"git clone https://github.com/clj-commons/manifold.git","description":"A compatibility layer for event-driven abstractions","language":"Clojure","stars":1052,"topics":["stream-processing","future","clojure","async","stream"],"license":null,"category":"data-pipelines","readme_excerpt":"Manifold provides basic building blocks for asynchronous programming, and can be used as a translation layer between libraries which use similar, but incompatible, abstractions. Manifold provides two core abstractions: deferreds , which represent a single asynchronous value, and streams , which represent an ordered sequence of asynchronous values. A detailed discussion of Manifold's rationale can be found here. Full documentation can be found here. Leiningen: deps.edn: Deferreds A deferred in Manifold is similar to a Clojure promise: However, similar to Clojure's futures, deferreds in Manifold can also represent errors. Crucially, they also allow for callbacks to be registered, rather than simply blocking on dereferencing. Callbacks are a useful building block, but they're a painful way to create asynchronous workflows. In practice, no one should ever need to use on-realized . Manifold provides a number of operators for composing over deferred values, which can be read about here. Streams Manifold's streams provide mechanisms for asynchronous puts and takes, timeouts, and backpressure. They are compatible with Java's BlockingQueues , Clojure's lazy sequences, and core.async's channels. Methods for converting to and from each are provided. Manifold differentiates between sources , which emit messages, and sinks , which consume messages. We can interact with sources using take! and try-take! , which return deferred values representing the next message. We can interact with sink","default_branch":null,"files":null,"tree":[],"storefront":"/r/clj-commons","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/clj-commons/manifold/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}