SimonRichardson / squishy-pants

Semi-serious function programming library.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

squishy-pants

Semi-serious functional programming library.

Build status

Build Status

Documentation

Alpha documentation is found here

Examples

Attempt

squishy.Attempt.Success(1).map(
  function(a) {
    return a + 1;
  }
).toOption().getOrElse(
  function() {
    return 0;
  }
);
// Outputs: 2

Option

squishy.Option.Some(1).map(
  function(a) {
    return a + 1;
  }
).getOrElse(
  function() {
    return 0;
  }
);
// Outputs: 2

Promise

squishy.Promise.of(1).map(
  function(a) {
    return a + 1;
  }
).fork(console.log);
// Outputs: 2

Stream

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)

More:

Building

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

Alternatives

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.

About

Semi-serious function programming library.

License:MIT License


Languages

Language:JavaScript 100.0%