Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

existence

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

existence

A monadic wrapper for dealing with existence

  • 1.1.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Existence

Build Status Dependencies

Fantasy Land Compliant!

Indigenous Complaint!

A monadic wrapper around values that may or may not exist. Inspired by Scala's Option monad. Unlike Scala's implementation, we have a really small interface and we purposefully don't implement Existence#get().

The problem with Existence#get() is it lets you side step the contextual bounds by unsafely detaching the value from the context. This results in the same NPE try/catch soup that Option is intended to avoid.

Examples

Monoid concatenation example:

var Some = require("existence/some");
var None = require("existence/none");

var list  = [new Some([1, 2, 3]), new None(), new Some([4, 5, 6])];
var added = list.reduce(function(memo, item) {
    return memo.concat(item);
});

console.log("value: " + JSON.stringify(filtered.getOrDefault([])));
// prints "value: [1, 2, 3, 4, 5, 6]"

Functor composition example:

var Some = require("existence/some");
var None = require("existence/none");

var some   = new Some(21);
var answer = some.map(function(n) {
    return n * 2;
});
console.log("value: " + answer.getOrDefault("None"));
// prints "value: 42"

var none = new None();
var nada = none.map(function(n) {
    return n * 2;
});
console.log("exists = " + nada.exists());
// prints "exists = false"

Applicative composition example:

var Existence = require("existence");
var Some      = require("existence/some");
var None      = require("existence/none");
var curry     = require("lodash").curry;

var someNumber  = new Some(42);
var someString  = new Some("beep");
var someBoolean = new Some(true);
var none        = new None();

var lifted = Existence.of(curry(function(a, b, c) {
    return a + " - " + b + " - " + c;
}));

var allThere = lifted.ap(someNumber).ap(someString).ap(someBoolean);
console.log("value: " + answer.getOrDefault("None"));
// prints "value: 42 - beep - true"

var missing = lifted.ap(someNumber).ap(none).ap(someBoolean);
console.log("value: " + answer.getOrDefault("None"));
// prints "value: None"

Monadic composition (flatMap / chain) example (flatMap is an alias for chain):

var Some = require("existence/some");
var None = require("existence/none");

var value    = new Some(42);
var filtered = value.flatMap(function(n) {
    return (n % 1 == 0) ? new Some(n)
                        : new None()
});

console.log("value: " + filtered.getOrDefault("value was not even"));
// prints "value: 42"

Keywords

FAQs

Package last updated on 09 Jul 2014

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc