@andrwj/fp
my own utility for Functional Programming
Last updated 2 months ago by andrwj .
ISC · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @andrwj/fp 
SYNC missed versions from official npm registry.

FPJS

A Functional tool set for my own learning FP style. Implemented by referring many other's source.

Introduced the beginning of this repository in Medium post

Installation

npm install @andrwj/fp

Either

static methods

  • Either.of(value, f)
  • Either.fromNullable(value)
  • Either.filter(f, condition_f=truth) - condition_f is optional
  • Either.right(value)
  • Either.left(value)
  • Either.done(value)
  • Either.doneIf(f, value)
  • Either.throw(value) - this throws Right(value) not Error instnace !!! and then only .catch() handle the passed Right
  • Either.throwIf(f, value)
  • Either.try(f)

instance methods for Right

  • .inspect(f)
  • .try(f)
  • .throw()
  • .tap(f=console.log)
  • .take(f)
  • .map(f)
  • .chain(f)
  • .filter(f)
  • .fold(_right, _left)
  • .done()
  • .doneIf(f)
  • .throwIf(f, value)
  • .apply( instance_of_Either )

instance methods for Left

  • .inspect(f)
  • .tap(f=console.log)
  • .take(f)
  • .fold(_right, _left)

NOTE

  • All methods work for Right only.
  • Only Right can .throw() or .done()
  • Basically Left will skip most methods except inspect, tap, take, fold
  • throw() does not throw Error. It is deliver of Right to .catch().
  • If you throw(), execution flow goes until find .catch()
  • If you done(), execution flow goes until find .fold() or .take()
  • If there is no exception in try(f), return value will be of Right. If Exception occurs, then the return value will be of Left.
  • If you do not want to get Unhandled Promise Rejection Error in .try(f), you HAVE TO deal with its logic of f yourself. The unhandled error is not because of .try() but because of your misunderstanding of Promise chain.

Fromise (Experimental; Promimse + Either)

  • Fromise.resolve (expr)
  • Fromise.reject (expr)
  • Fromise.isPromise (value)
  • .pipe (...funcs)
  • .if (f_condition, if_true, if_false)
  • .tap (f)
  • .either (f)
  • .map (f)
  • .fold (f, g)
  • .chain (f)

High Order Functions (Not fully documented yet)

  • run(v, f1, f2, f3, ... ) : value
  • pipe(f1, f2, f3, ...) : function

Utilities (Not fully documented yet)

  • isFunction (v) - return true if v is function
  • isFalsy (v) - true if v is one of undefined, NaN, null
  • isFalse (v) - true if v is one of undefined, NaN, null, 0, ""
  • identity (v) - returns v, always.

Logic Gates

  • import {NOT, OR, AND, NAND, NOR, XOR, XNOR, chart_dump} from FPJS;

Test Source Codes with RunJS

// use loader.js for local developing
// for example:
import {Either} from '/Users/andrwj/Develops/FPJS/FPJS/loader';


Changes

v0.2.4 Published compiled source by Babel7

v0.2.0 break changes to version of 0.1.*

  • changed arguments order and way: Either.of(f, value)Either.of(value, f) - if f is not given, it just returns Right(value). Otherwise, it returns Right(value) or Left(value) depends on the boolean result of f(value)
  • changed arguments: .catch(f, condition_f).catch(f) - if f is not given, it returns the instance of thrown from .throw(). Otherwise it returns .map(f)
  • added: .of(value, f) - same as Either.of(value, f)
  • added: isNotFalsy(v) : boolean

Current Tags

  • 0.3.3                                ...           latest (2 months ago)

31 Versions

  • 0.3.3                                ...           2 months ago
  • 0.3.2                                ...           7 months ago
  • 0.3.1                                ...           7 months ago
  • 0.3.0                                ...           7 months ago
  • 0.2.6                                ...           8 months ago
  • 0.2.5                                ...           8 months ago
  • 0.2.4                                ...           8 months ago
  • 0.2.3                                ...           8 months ago
  • 0.2.2                                ...           8 months ago
  • 0.2.1                                ...           8 months ago
  • 0.2.0                                ...           8 months ago
  • 0.1.6                                ...           8 months ago
  • 0.1.5                                ...           8 months ago
  • 0.1.4                                ...           8 months ago
  • 0.1.3                                ...           8 months ago
  • 0.1.2                                ...           8 months ago
  • 0.1.1                                ...           8 months ago
  • 0.1.0                                ...           8 months ago
  • 0.0.16                                ...           8 months ago
  • 0.0.15                                ...           8 months ago
  • 0.0.11                                ...           9 months ago
  • 0.0.10                                ...           9 months ago
  • 0.0.9                                ...           9 months ago
  • 0.0.8                                ...           9 months ago
  • 0.0.7                                ...           9 months ago
  • 0.0.6                                ...           9 months ago
  • 0.0.5                                ...           9 months ago
  • 0.0.4                                ...           9 months ago
  • 0.0.3                                ...           9 months ago
  • 0.0.2                                ...           9 months ago
  • 0.0.1                                ...           9 months ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 31
Last Day 0
Last Week 31
Last Month 32
Dependencies (3)
Dev Dependencies (4)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |