fp-naive

Library for functional programming in JavaScript

Usage no npm install needed!

<script type="module">
  import fpNaive from 'https://cdn.skypack.dev/fp-naive';
</script>

README

Library for functional programming in JavaScript

Provides specifications and implementations for some functional models and also extra functions to make work with them easier.

You can find here:

  • Maybe
  • Either
  • List
  • IO
  • Task
  • ... others

Usage

It's very simple to use this library :

  • whole library
const {Maybe} = require('fp-naive');
const m = Maybe.fromNullable(3);
console.log(m.inspect());
  • one file
const Either = require('fp-naive/build/implementations/Either').default;
const e = Either.left(5);
console.log(e.inspect());

Documentation

Maybe

Allow to skip operations when there is no data Container (Nothing case):

Provides methods:

  • just and nothing - create instances of Maybe
Maybe
    .just(1)
    .inspect(); // Maybe.Just { 1 }

Maybe
    .nothing(1)
    .inspect(); // Maybe.Nothing { }
  • fromNullable - safely creates instance
Maybe
    .fromNullable(0)
    .inspect(); // Maybe.Just { 0 }

Maybe
    .fromNullable()
    .inspect(); // Maybe.Nothing { }

Maybe
    .fromNullable(null)
    .inspect(); // Maybe.Nothing { }

Maybe
    .fromNullable(undefined)
    .inspect(); // Maybe.Nothing { }
  • map - transforms internal value
Maybe
    .fromNullable(2)
    .map((a) => a + 1)
    .inspect(); // Maybe.Just { 3 }
  • ap - passes arguments into contained function
Maybe.fromNullable((a) => (b) => a + b)
    .ap(Maybe.fromNullable(2))
    .ap(Maybe.fromNullable(3))
    .inspect(); // Maybe.Just { 5 }

Maybe.Nothing will safely ignore this methods and Maybe.Nothing wil be returned

const incOrFail = (a) => {
    if (Number.isFinite(a)) {
        return a + 1;
    } else {
        throw new Error('Not a number: ' + a);
    }
};

Maybe
    .fromNullable()
    .map(incOrFail)
    .inspect(); // Maybe.Nothing { }
  • get - returns contained value ( throw an Error in case of Maybe Nothing)
Maybe
    .fromNullable(5)
    .get(); // 5
  • getOrElse and getOrElseRun - allow to safely return contained value or use default value or run function
Maybe
    .fromNullable(5)
    .getOrElse(8); // 5

Maybe
    .fromNullable()
    .getOrElse(8); // 8

Maybe
    .fromNullable()
    .getOrElseRun(() => 8); // 8

See full documentation here