@nvarner/monads
TypeScript icon, indicating that this package has built-in type declarations

0.5.1 • Public • Published

👻 Monads

Type safe Option, Result, and Either types; inspired by Rust. Fork of @hqoss/monads (source)

Table of contents

Install

Node.js and the Browser

npm install @nvarner/monads

⚠️ NOTE: The project is configured to target ES2018 and the library uses commonjs module resolution.

📝 Usage

Option<T>

import { Option, Some, None } from "@nvarner/monads"

function divide(numerator: number, denominator: number): Option<number> {
  if (denominator === 0) {
    return None
  } else {
    return Some(numerator / denominator)
  }
};

// The return value of the function is an option
const result = divide(2.0, 3.0)

// Pattern match to retrieve the value
const message = result.match({
  some: res => `Result: ${res}`,
  none: "Cannot divide by 0",
})

console.log(message) // "Result: 0.6666666666666666"

Result<T, E>

import { Result, Ok, Err } from "@nvarner/monads"

function getIndex(values: string[], value: string): Result<number, string> {
  const index = values.indexOf(value)

  switch (index) {
    case -1:
      return Err("Value not found")
  default:
    return Ok(index)
  }
}

console.log(getIndex(["a", "b", "c"], "b")) // Ok(1)
console.log(getIndex(["a", "b", "c"], "z")) // Err("Value not found")

Either<L, R>

import { Either } from "@nvarner/monads"

function getLabel(uncertainDate: Either<Date, string>) {
  return uncertainDate.match({
    left: date => date.toLocaleDateString(),
    right: text => `<abbr title="${text}">an uncertain date</abbr>`,
  })
}

API Docs

See full API Documentation here.

Package Sidebar

Install

npm i @nvarner/monads

Weekly Downloads

0

Version

0.5.1

License

MIT

Unpacked Size

150 kB

Total Files

31

Last publish

Collaborators

  • nvarner