Functional programming in Dart
- Type class hierarchy in the spirit of cats, scalaz and the standard Haskell libraries
- Immutable, persistent collections, including IVector, IList, IMap, IHashMap, ISet and AVLTree
- Option, Either, State, Tuple, Free, Lens and other tools for programming in a functional style
- Evaluation, a Reader+Writer+State+Either+Future swiss army knife monad
- Type class instances (Monoids, Traversable Functors, Monads and so on) for included types, as well as for several standard Dart types
- Conveyor, an implementation of pure functional streaming
- Examples, showcasing core concepts
A good place to start learning is the excellent Functional Programming in Scala by Paul Chiusano and Rúnar Bjarnason. I can not recommend this book highly enough.
You can also take a look at Category Theory for Programmers by Bartosz Milewski.
- Starting with version 0.10.0, Dart 2.12+ is required
- 0.9.x supports Dart 1 and older Dart 2 versions
- Basic type class structure and collection classes are relatively stable, but might see restructuring in future releases
- Optimized for dart2js/node/v8, with performance on the dart vm being of distant secondary concern
- Most things are stack safe and reasonably efficient, but there are a couple of exceptions and plenty of room for further optimizations
- The streaming/conveyor stuff is highly experimental
- The lens implementation is experimental and very bare bones
See LICENSE