drinkery alternatives and similar packages
Based on the "Data" category.
Alternatively, view drinkery alternatives based on common mentions on social networks and blogs.
-
semantic-source
Parsing, analyzing, and comparing source code across many languages -
lens
Lenses, Folds, and Traversals - Join us on web.libera.chat #haskell-lens -
code-builder
Packages for defining APIs, running them, generating client code and documentation. -
text
Haskell library for space- and time-efficient operations over Unicode text. -
cassava
A CSV parsing and encoding library optimized for ease of use and high performance -
unordered-containers
Efficient hashing-based container types -
compendium-client
Mu (μ) is a purely functional framework for building micro services. -
holmes
A reference library for constraint-solving with propagators and CDCL. -
resource-pool
A high-performance striped resource pooling implementation for Haskell -
primitive
This package provides various primitive memory-related operations. -
binary
Efficient, pure binary serialisation using ByteStrings in Haskell. -
discrimination
Fast linear time sorting and discrimination for a large class of data types -
IORefCAS
A collection of different packages for CAS based data structures. -
dependent-sum
Dependent sums and supporting typeclasses for comparing and displaying them -
reflection
Reifies arbitrary Haskell terms into types that can be reflected back into terms -
dependent-map
Dependently-typed finite maps (partial dependent products) -
orgmode-parse
Attoparsec parser combinators for parsing org-mode structured text! -
scientific
Arbitrary-precision floating-point numbers represented using scientific notation -
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions -
text-icu
This package provides the Haskell Data.Text.ICU library, for performing complex manipulation of Unicode text.
InfluxDB - Power Real-Time Data Analytics at Scale
Do you think we are missing an alternative of drinkery or a related project?
README
drinkery
drinkery is a yet another stream processing library themed on liquors. While it offers a simple interface, it also tries to be as expressive as possible.
Producers
drinkery supports three types of producers: Producer
, ListT
, and Tap
.
Producer r s
is a monad transformer to produce a stream of type s
. It is good
at interactively serving values.
yield :: s -> Producer r s m a
is the primary action.
A barman can also accept requests from the downstream using accept
.
ListT r
is a list-like backtracking monad (also known as ListT done right).
It is useful for sampling elements of containers with effects.
sample :: Foldable f => f s -> ListT r m s
samples elements in any Foldable
container. inquire
to interact with the downstream.
Tap
is an endless producer. This can be connected to a 'Patron' or a 'Distiller'.
Producer
and ListT
are converted to Tap
by runProducer
and runListT
respectively.
Consumer
Sink tap
is a monad transformer which consumes tap
.
drink :: m s
Get one element.leftover :: s -> m ()
Leave one element.request :: r -> m ()
Send a request.
(+&) :: (Monoid r, CloseRequest r, Monad m) => Tap r s m -> Sink (Tap r s) m a -> m a
connects a tap with a drinker.
Transducer
Distiller tap m r s
is a stream transducer which
- Consumes
tap
- Receives
r
- Produces
s
It is actually a Tap
where the underlying monad is Sink
.
There are two composition operators:
++&
Tap-drinker++$
Tap-distiller
+
, &
, and $
means a tap, a drinker, and a distiller respectively. The middle
characters of these operators signify the resulting structures.
Why drinkery?
drinkery is designed to be fully featured and complements other libraries' missing functionalities.
pipes
pipes
is quite similar in that both Proxy
and Distiller
are bidirectional.
Still there are some differences:
Distiller
does not terminate.- Unlike pipes'
>->
,++$
propagates inner requests:(++$) :: Monad m => Distiller tap m p q -> Distiller (Tap p q) (Sink tap m) r s -> Distiller tap m r s
(>->) :: Proxy a' a () b m r -> Proxy () b c' c m r -> Proxy a' a c' c m r
Sink
, the consumer monad, may leave unconsumed inputs.drinkery
has much fewer operators.
conduit
Both drinkery
and conduit
support leftovers, closing operation, and end of stream.
The main difference is interactivity.
machines
machines
does not support leftovers, nor interactive producers.
Both machines
and drinkery
support multi-channel input.
iteratee
iteratee
has an ability to handle requests but those are untyped (SomeException
).
drinkery
provides a more robust interface for handling requests, and monadic producers.