Skip to content
This repository was archived by the owner on Nov 13, 2022. It is now read-only.

TheSacredLipton/deno-monads

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

289 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deno

import { Some } from "https://pax.deno.dev/TheSacredLipton/deno-monads";

Some('air').unwrapOr('baloon') // "air"
None.unwrapOr('baloon') // "baloon"

Usage

Option<T>

import { Option, Some, None } from "https://pax.deno.dev/TheSacredLipton/deno-monads";

const 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 "https://pax.deno.dev/TheSacredLipton/deno-monads";

const 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);
  }
};

const values = ['a', 'b', 'c'];

getIndex(values, 'b'); // Ok(1)
getIndex(values, 'z'); // Err("Value not found")

Either<L, R>

import { Either } from "https://pax.deno.dev/TheSacredLipton/deno-monads";

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

License

See LICENSE

About

👻 Option, Result, and Either types for TypeScript; Inspired by Rust

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 100.0%