Well-structured Arrays with fast random-element-access for Elixir, offering a common interface with multiple implementations (MapArray, Erlang :array, etc.) with varying performance guarantees that can be switched in your configuration.
An `Arrays` implementation for `Aja`'s `Vector` datatype, which is an implementation of a 'Hickey Trie' Vector written completely in Elixir. This implementation very efficient for most array-based operations.
An `Arrays` implementation based on a set of NIFs (Natively Implemented Functions) written in Rust. The internal representation of the array is known as a 'Relaxed Radix Balanced Vector', provided by the Rust `im` library. Performance is unfortunately overshadowed by NIF-calling overhead.
Keep track of when hotfixes can be removed by showing compile-time warnings when issues are closed.
CapturePipe exposes an extended pipe-operator that allows the usage of bare function captures.
Coerce allows defining coercions, standardized conversions, between data types.
ComplexNum allows you to do math with Complex Numbers. Both Cartesian and Polar form are supported.
Comfortable, Explicit, Multi-Layered and Well-Documented specifications for Dynamic Configuration
The Currying library allows you to partially apply (or 'curry') any Elixir function, in a very transparent way. It also optionally implements the infix operator `~>` as a synomym for currying.
A lightweight reusable Extractable protocol, allowing extracting elements one-at-a-time from a collection.
FunLand adds Behaviours to define Algebraic Data Types ('Container' data types) to Elixir, such as Functors, Monoids and Monads.
A library that allows for doing Functional Reactive Programming in Elixir
A lightweight reusable Insertable protocol, allowing insertion elements one-at-a-time into a collection.
Calculates the difference between two (nested) maps, and returns a map representing the patch of changes.
Numbers dispatches on any numeric type that follows the `Numeric` behaviour. This allows you to create composite types working with _any_ numeric type (Decimal, Ratio, Tensor, ComplexNum, ???)!
Well-structured Queues for Elixir, offering a common interface with multiple implementations with varying performance guarantees that can be switched in your configuration.
A protocol for making your custom datastructures orderable (for sorting and comparing.).
Easy usage of the Planga Seamless Chat Service inside an Elixir+Phoenix application.
Well-structured Priority Queues for Elixir, offering a common interface with multiple implementations with varying performance guarantees that can be switched in your configuration.
This library allows you to use Rational numbers in Elixir, to enable exact calculations with all numbers big and small.
Keep track of revisions, versions, changes to your data. Persistence layer agnostic.
A Revisionair Storage Adapter based on Ecto. Keeps track of revisions, changes, versions of your data structures.
Ecto 3 Adapter for the Riak KV database (v 2.0 and upward), representing schemas as CRDTs.
The Sequences module defines multiple methods that return a Stream of numbers, usually integers.
Well-structured Sets for Elixir, offering a common interface with multiple implementations with varying performance guarantees that can be switched in your configuration.
A Macro-based solution to working with ok/error tuples (AKA result tuples, success tuples or tagged statuses) in `case` and `with` statements and in collections.
Comfortable, Explicit, Multi-Layered and Well-Documented Specifications for all your configurations, settings and options
Perform Event dispatching in an Event Sourcing and The Elm Architecture (TEA)-like style.
Tensor adds Vectors, Matrices and Tensors to your application. These are a lot faster than a list (of lists).
Fast and flexible runtime type-checking: Type checks are optimized by the compiler and types can be composed, re-used and turned into property-testing generators. TypeCheck also focuses on showing understandable messages on typecheck-failures.