Socket
Book a DemoInstallSign in
Socket

dgelong

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dgelong

A JavaScript Implementation of Useful First-class Citizens

latest
Source
npmnpm
Version
0.0.20
Version published
Weekly downloads
2
100%
Maintainers
1
Weekly downloads
 
Created
Source

Dgelong

build status gitter

It's not ready for production. Stay tuned.

Set of useful first-class structures which allow you to get rid of your developer's pain.

  • Flatten by default.
  • Minimal API sufrace area.
  • Immutable.
  • Lazy evaluation.
  • Full interoperability between all structures and JavaScript natives.

Install

npm install dgelong --save

Motivation

I've read Fantasy Land specification. I don't want make another implementation that requires Ph.D in Math. The usage of monads should be as simple as functional composition f(g(a)). API should be close to native. So if we're talking about data structures, they should be produced in the same way as natives: by calling constructor function with or without new operator (I prefer the second approach).

Usage

Note: Babel is used for transpiling Dgelong's sources. The author highly recommends you to start using ECMAScript 6 in your project.

Dgelong's bundle uses UMD so it can be required in all environments (CommonJS, AMD, ES6 modules, browser).

CommonJS

var Dgelong = require('dgelong');

ECMAScript 6

Just like in CommonJS Modules style you can grab everything in one object:

import Dgelong from 'dgelong';

Or just use something specific, for example:

import {Maybe, Future} from 'dgelong';

But, along with that, you can import particular structures by using direct paths:

import Maybe, {Just, Nothing} from 'dgelong/maybe';
import Either, {Right, Left} from 'dgelong/either';
import Future, {Resolve, Reject} from 'dgelong/future';
import Observable from 'dgelong/observable';

Browser

<script src="node_modules/dgelong/bundle.js"></script>

It will provide you Dgelong global variable.

Time & Space

  • Time (bind, subscribe)
    • Future (async task as value)
    • Observable (async lists)
  • Space (bind, pull)
    • Maybe (null-safe computations)
    • Either (two-way composition)

Maybe

import {Just, Nothing} from 'dgelong/maybe';

function square(n) {
    return n * n;
}

function isEven(n) {
    return n % 2 ? Nothing() : Just(n);
}

Just(5)
    .bind(square) // returns Just(25)
    .bind(isEven) // returns Nothing()
    .bind(alert); // won't work

Either

import {Right as Success, Left as Failure} from 'dgelong/either';

function validateUserPassword(password) {
    if (password.length < 10) return Failure('Password too short');
    if (!/[0-9]/g.test(password)) return Failure('Password should contain numbers');

    return Success(password);
}

validateUserPassword('boo')
    .bind(savePassword, showError);

Future

import Future from 'dgelong/future';

function fetch(url) {
	return Future(function(resolve, reject) {
		var xhr = new XMLHttpRequest();

		xhr.onload = () => resolve(this.response);
		xhr.onerror = () => reject(this);

		xhr.open(url);
		xhr.send(null);

		return {
			dispose() { xhr.abort(); }
		};
	});
}

fetch('/products')
	.bind(products => ...)
	.subscribe(showProducts);

Observable

import Observable from 'dgelong/observable';

var clicks = Observable(function(next){
	document.addEventListener('click', next);

	return {
		dispose(){ document.removeEventListener('click', next); }
	};
});

clicks
	.map(event => event.target)
	.forEach(element => ...);

License

MIT (c) Alexey Raspopov

Keywords

functional

FAQs

Package last updated on 11 Sep 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts