0.1.0 • Published 6 years ago

bl-js-monads v0.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
6 years ago

Monads for javascript

Option

Usage:

import { Option } from 'bl-js-monads';;

// Basic value

const opt1 = Option.of ('BOE')

console.log (opt1.isSome)   // true
console.log (opt1.isNone)   // false
console.log (opt1.value())  // BOE

// Basic none (no value)

const opt2 = Option.none

console.log (opt2.isSome)   // false
console.log (opt2.isNone)   // true
opt2.value()                // throws error 'Option has no value'

// Setting null leads to none and is factual Option.none

const opt3 = Option.of (null)

console.log (opt3.isSome)   // false
console.log (opt3.isNone)   // true
opt3.value()                // throws error 'Option has no value'

// Mapping

const opt4 = Option.of ('BOE')
    .map (v => `${v}-BA`)

console.log (opt4.isSome)   // true
console.log (opt4.isNone)   // false
console.log (opt4.value())  // BOE-BA

// Flatmapping (aka mapping to another Option)

const opt5 = Option.of ('BOE')
    .flatMap (v => Option.of (`${v}-BA`))

console.log (opt5.isSome)   // true
console.log (opt5.isNone)   // false
console.log (opt5.value())  // BOE-BA

// Mapping of none

const opt6 = Option.none
    .map (v => `${v}-BA`)

console.log (opt6.isSome)   // false
console.log (opt6.isNone)   // true

// Chaining

const opt7 = opt5.flatMap (v => opt4)

console.log (opt7.isSome)   // true
console.log (opt7.isNone)   // false
console.log (opt7.value())  // BOE-BA

Try

Usage:

import { Try } from 'bl-js-monads';

// Basic value

const try1 = Try.succesfull ('BOE')

console.log (try1.get())  // BOE

// Basic failure

const try2 = Try.failure ('Some error')

try {
    try2.get()
} catch (e) {
    console.error (e)  // Result: Some error
}

// Basic

const try3 = Try.ofFailable (() => 'BA')

console.log (try3.get())  // BA


const try4 = Try.ofFailable (() => { throw 'Some error' })

try {
    try4.get()
} catch (e) {
    console.error (e)  // Result: Some error
}

// Side-FX

const try5 = Try.ofFailable (() => 'BA')
    .onSuccess (v => console.log (`Success: ${v}`))  // Feedbacks Success: BA
    .ofFailure (e => console.log (`Error: ${e}`))

console.log (try5.get())  // BA

const try6 = Try.ofFailable (() => { throw 'Some error' })
    .onSuccess (v => console.log (`Success: ${v}`))  
    .ofFailure (e => console.log (`Error: ${e}`))    // Feedbacks Error: Some error

try {
    try6.get()
} catch (e) {
    console.error (e)  // Result: Some error
}

// Mapping

const try7 = Try.succesfull('BOE')
    .map (v => `${v}-BA`)

console.log (try7.get())  // BOE-BA

// Flatmapping (aka mapping to another Try)

const try8 = Try.succesfull('BOE')
    .flatMap (v => Try.succesfull(`${v}-BA`))

console.log (try8.get())  // BOE-BA

// Map to option

const try9 = Try.succesfull('BOE')
    .toOption ()

console.log (try9.isSome)  // true
console.log (try9.value())  // BOE

const try10 = Try.failure('BOE')
    .toOption ()

console.log (try10.isNone)  // true
0.1.0

6 years ago

0.0.9

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago