npm install --save funfix
The code is organized in ES2015 modules, but all types, classes and functions are exported by the root module.
core defines core data types and universal interfaces:
|Option<A>||data type for representing optional values, much like the "
|Either<L,R>||data type for representing disjoint unions, for working with values of two possible types, inspired by the data type with the same name from Haskell and Scala|
|Try<A>||data type for capturing exceptional results and manipulating them as values, being equivalent in spirit with
|core/errors||sub-module that defines the standard
|core/std||sub-module that defines the
"exec" defines low level primitives for dealing with asynchrony and concurrency:
|DynamicRef<A>||binding mechanism for global variables, inspired by Scala's implicits|
|exec/cancelable||sub-module that defines
|exec/scheduler||sub-module that defines
|exec/time||sub-module that defines
"effect" defines data types for dealing with side effects:
|Eval<A>||data type for suspending synchronous side effects and controlling evaluation (e.g. memoization, error handling)|
|Eq||a type class for determining equality between instances of the same type and that obeys the laws defined in EqLaws|
|Functor||a type class exposing
|Apply||a type class that extends
|Applicative||a type class that extends
|ApplicativeError||a type class that extends
|FlatMap||a type class that extends
|Monad||a type class that extends
|MonadError||a type class that extends
More is coming 😉
See API Docs.
It also makes the best use of the capabilities of each. For example TypeScript has bivariant generics, but Flow supports variance annotations and Funfix makes use of them. Development happens in TypeScript, due to better tooling, but both are first class citizens.
Funfix versioning follows the sematic versioning (semver) specification, meaning that versions have the
$major.$minor.$patch format, where any
$major increment means that a breaking change happened. It's also configured with a fully automated release process, triggered by any commits on master.
Projects for usage in combination with Funfix:
The Funfix project welcomes contributions from anybody wishing to participate. All code or documentation that is provided must be licensed with the same license that Funfix is licensed with (Apache 2.0).
Feel free to open an issue if you notice a bug, have an idea for a feature, or have a question about the code. Pull requests are also gladly accepted. For more information, check out the contributor guide.
All code in this repository is licensed under the Apache License, Version 2.0. See LICENCE.