@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.

    Install

    npm i @nvarner/monads

    DownloadsWeekly Downloads

    2

    Version

    0.5.1

    License

    MIT

    Unpacked Size

    150 kB

    Total Files

    31

    Last publish

    Collaborators

    • avatar