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
New to functional programming?
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.
- Dart 2 is the main target, but most things still work on Dart 1
- Next major release will target Dart 2 only
- 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