schonfinkel v0.1.0
Schönfinkel

Lightweight typescript utilities for functional programming
Installation
Simply install this package via npm
npm i schonfinkel(This module automatically provide typescript type definitions)
Usage
At the moment the package just contains Option monads.
An Option monad consists of two distinct values it embraces: none() and some(a) (where a can be any arbitrary other value).
You can think of none() as a similar thing to null.
Option monads provide an elegant way to handle nullable types/data and reduce infrastructure code enormously.
Here is a simple example of a function that returns an Option:
import { some, none } from 'schonfinkel';
function safeGetChar(str: string, index: number): Option<string> {
if (index <= str.length)
return none();
else
return some(str[index]);
}
safeGetChar('abc', 0); // some('a')
safeGetChar('abc', 5); // none()Now you can simply use the map method to modify data (if present) or pass it (if not present); You can use this pretty much similar to the map method of the Javascript Array:
function safeGetCharUpperCase(str: string, index: number): Option<string> {
return safeGetChar(str,index)
.map(x => x.toUpperCase())
}
safeGetCharUpperCase('abc', 0); // some('A')
safeGetCharUpperCase('abc', 5); // none()To provide default values for the Option monad in case of a none() value you can simply use the getOrElse method:
safeGetCharUpperCase('abc', 0)
.getOrElse(''); // 'A'
safeGetCharUpperCase('abc', 5)
.getOrElse(''); // ''| Method | none() | some(a) | Description |
|---|---|---|---|
map(f) | none() | some(f(a)) | f is of type (a: A) => B |
flatMap(f) | none() | f(a) | f is of type (a: A) => Option<B> (flatmap is the monadic bind operator) |
getOrNull | null | a | |
getOrUndefined | undefined | a | |
getOrElse(b) | b | a | |
getOrLazyElse(f) | f() | a | computes the "else" value in a lazy fashon |
pick(k) | none() | some(a[k]) | safely get a property-value (of prop. k) |
isNone() | true | false | |
forSome(f) | - | - | f is of type (a: A) => void. f is only executed for an instance of Some |
equals(opt) | true iff opt is of type none() | true iff opt is of type some(b) and a===b |
7 years ago