Semi-serious functional programming library.
Alpha documentation is found here
squishy.Attempt.Success(1).map(
function(a) {
return a + 1;
}
).toOption().getOrElse(
function() {
return 0;
}
);
// Outputs: 2
squishy.Option.Some(1).map(
function(a) {
return a + 1;
}
).getOrElse(
function() {
return 0;
}
);
// Outputs: 2
squishy.Promise.of(1).map(
function(a) {
return a + 1;
}
).fork(console.log);
// Outputs: 2
squishy.Stream.fromArray([1, 2, 3, 4]).map(
function(a) {
return a + 1;
}
).zipWithIndex().fork(console.log);
// Outputs: Tuple2(2, 0), Tuple2(3, 1), Tuple2(4, 2), Tuple2(5, 3)
- Array methods
- Attempt
- Check (similar to ScalaCheck and QuickCheck)
- Either
- Environment
- FO - Fantasy Overloading
- Identity
- IO
- Lazy
- Lens
- List
- Option
- Partial
- Promise
- Reader
- State
- Store
- Stream
- Trampoline
- Tuples (from 2 to 5)
- Writer
Install the development dependencies with npm:
npm install
Run the tests with npm:
npm test
Run the tests with grunt:
grunt default
Optionally you can also run the tests parallelized with nodeunit because we use QuickCheck for testing it can take some time especially if the goal of QuickCheck is set at a high value.
Set the number of tasks to run parallel, the --numOfParallel
is optional, setting no value will set
it to run 2
tasks in parallel.
Obviously the number of tasks to be run in parallel depends on the type of CPU and the number of cores available.
grunt par --numOfParallel=4
If you're looking for a serious functional programming library one that derives a lot from Haskell and Category Theory then consider looking into bilby.js. A lot of the ideas in bilby.js are also found in squishy-pants, but differ in some implementation types.
If a tree falls in the woods, does it make a sound?
If a pure function mutates some local data in order to produce an immutable return value, is that ok?
Rich Hickey at http://clojure.org/transients
Squishy-pants assumes that it is ok to mutate local data as long as that local data is not exposed and if the result is immutable.
There is also lemonad which is in the similar vein to bibly.js and squishy-pants, with the aid of it's very good companion book Functional Javascript.