All Projects → fogfish → Datum

fogfish / Datum

Licence: apache-2.0
pure functional and generic programming for Erlang

Programming Languages

erlang
1774 projects

Projects that are alternatives of or similar to Datum

Language Ext
C# functional language extensions - a base class library for functional programming
Stars: ✭ 3,964 (+3471.17%)
Mutual labels:  monads, lenses
futils
Utilities for generic functional programming
Stars: ✭ 21 (-81.08%)
Mutual labels:  monads, lenses
Cyclops
An advanced, but easy to use, platform for writing functional applications in Java 8.
Stars: ✭ 1,180 (+963.06%)
Mutual labels:  data-structures, streams
Algae
Bootstrapped algebraic data types for Elixir
Stars: ✭ 272 (+145.05%)
Mutual labels:  data-structures, algebraic-data-types
Whyhaskellmatters
In this article I try to explain why Haskell keeps being such an important language by presenting some of its most important and distinguishing features and detailing them with working code examples. The presentation aims to be self-contained and does not require any previous knowledge of the language.
Stars: ✭ 418 (+276.58%)
Mutual labels:  algebraic-data-types, monads
Lambda
Functional patterns for Java
Stars: ✭ 737 (+563.96%)
Mutual labels:  algebraic-data-types, lenses
Imtools
Fast and memory-efficient immutable collections and helper data structures
Stars: ✭ 85 (-23.42%)
Mutual labels:  data-structures, algebraic-data-types
Flatqueue
A very fast and simple JavaScript priority queue
Stars: ✭ 98 (-11.71%)
Mutual labels:  data-structures
Codelibrary
💎Collection of algorithms and data structures
Stars: ✭ 1,585 (+1327.93%)
Mutual labels:  data-structures
Algorithms
Algorithms and data structures implemented in JavaScript with explanations, for further readings
Stars: ✭ 99 (-10.81%)
Mutual labels:  data-structures
Merkle.rs
🎄 Merkle tree in Rust
Stars: ✭ 98 (-11.71%)
Mutual labels:  data-structures
Bit
Bitset data structure
Stars: ✭ 100 (-9.91%)
Mutual labels:  data-structures
Go Algorithms
Algorithms and data structures for golang
Stars: ✭ 1,529 (+1277.48%)
Mutual labels:  data-structures
Javascript
A repository for All algorithms implemented in Javascript (for educational purposes only)
Stars: ✭ 16,117 (+14419.82%)
Mutual labels:  data-structures
Ipfs Connector
AKASHA <---> IPFS connector
Stars: ✭ 107 (-3.6%)
Mutual labels:  data-structures
Softuni
SoftUni Courses
Stars: ✭ 98 (-11.71%)
Mutual labels:  data-structures
Go Algorithm
Implementations of data structures & algorithms written in Golang.
Stars: ✭ 109 (-1.8%)
Mutual labels:  data-structures
Leetcode
LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。)
Stars: ✭ 45,650 (+41026.13%)
Mutual labels:  data-structures
Gopherlabs
The Ultimate Workshop Track for #golang Developer
Stars: ✭ 106 (-4.5%)
Mutual labels:  data-structures
Lispe
An implementation of a full fledged Lisp interpreter with Data Structure, Pattern Programming and High level Functions with Lazy Evaluation à la Haskell.
Stars: ✭ 105 (-5.41%)
Mutual labels:  data-structures

datum : "scrap your boilerplate" for Erlang

You could do this with a macro, but... the best macro is a macro you don't maintain

datum is a pure functional and generic programming for Erlang. It had its origins in Purely Functional Data Structures by Chris Okasaki, on implementing a various higher rank functional abstractions and patterns, on dealing with scrap your boilerplate and gaining experience from other functional languages primary Scala and Haskell. The library is still testing the limits of functional abstractions in Erlang.

Changelog Build Status Coverage Status Gitter Hex.pm Hex Downloads

Key features

The feature overview provides an introduction to datum features, use-cases and reasoning of they existence:

  • option and either type notations
  • a set of generic data types that can be inspected, traversed, and manipulated with common behavior: foldable, traversable and map-like.
  • pure functional data types: binary search tree, red-black tree, heap, queues, and others
  • streams or lazy lists are a sequential data structure that contains on demand computed elements.
  • resembles concept of getters and setters (lens) for complex algebraic data types.
  • mapping of algebraic data types to they generic representation and back
  • define a category pattern, monads and they composition for Erlang applications. You might be familiar with this concept as pipe, flow or function composition.
  • generic do-notation with pattern matching.
  • typecasts of primitive data types
  • supports OTP/18.x or later release

Getting started

The latest version of the library is available at its master branch. All development, including new features and bug fixes, take place on the master branch using forking and pull requests as described in contribution guidelines.

The stable library release is available via hex packages, add the library as dependency to rebar.config

{deps, [{datum}]}.

Please follow the feature overview to start leaning all available features; then continue to library examples and to source code.

How To Contribute

The library is Apache 2.0 licensed and accepts contributions via GitHub pull requests:

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

The development requires Erlang/OTP version 19.0 or later and essential build tools.

Build and run service in your development console. The following command boots Erlang virtual machine and opens Erlang shell.

git clone https://github.com/fogfish/datum
cd datum
make
make run

commit message

The commit message helps us to write a good release note, speed-up review process. The message should address two question what changed and why. The project follows the template defined by chapter Contributing to a Project of Git book.

Short (50 chars or less) summary of changes

More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. In some contexts, the first line is treated as the subject of an email and the rest of the text as the body. The blank line separating the summary from the body is critical (unless you omit the body entirely); tools like rebase can get confused if you run the two together.

Further paragraphs come after blank lines.

Bullet points are okay, too

Typically a hyphen or asterisk is used for the bullet, preceded by a single space, with blank lines in between, but conventions vary here

bugs

If you experience any issues with the library, please let us know via GitHub issues. We appreciate detailed and accurate reports that help us to identity and replicate the issue.

  • Specify the configuration of your environment. Include which operating system you use and the versions of runtime environments.

  • Attach logs, screenshots and exceptions, in possible.

  • Reveal the steps you took to reproduce the problem, include code snippet or links to your project.

License

See LICENSE

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].