npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

arraybe

v0.0.2

Published

Maybe monad implementation with using of arrays

Downloads

2

Readme

Arraybe

This is an implementation of the Maybe monad using array

API

nothing :: Maybe

It is a nothing value

Definition:

const nothing = Object.freeze([]);

empty :: () => Maybe

It is a function that returns nothing

Definition:

const empty = () => []

just :: T => Maybe T

It takes a value and wrap it with Maybe monad

Definition:

const just = x => [x];

of :: T => Maybe T

It's an equivalent of just


isJust :: Maybe T => boolean

It takes a Maybe monad and returns true if it contains a value.

Definition:

const isJust = maybeValue => maybeValue.length > 0;

isNothing :: Maybe T => boolean

It takes a Maybe monad and returns true if it doesn't contain a value.

Definition:

const isNothing = maybeValue => maybeValue.length === 0;

equals :: Maybe T => Maybe T => boolean

It takes two maybe monads and returns true if they are equal.

Simple definition:

const equals = (a, b) => {
  return (
    (isNothing(a) && isNothing(b)) || (isJust(a) && isJust(b) && a[0] === b[0]) // both contains same value
  );
};

This is a curried function:

equals(a, b) === equals(a)(b);

lte :: Maybe T => Maybe T => boolean

It takes two maybe values and returns true if first is less or equal then second

lte(nothing, just(...)); // true
lte(just(1), just(2)); // true
lte(just(2), just(2)); // true
lte(just(3), just(2)); // false
lte(just(...), nothing)  // false

lteWith :: ((a,b) => boolean) => Maybe T => Maybe T

It takes function that desides if inner value of first maybe less or equal then innerValue of second maybe value.

const arrayLengthLte = (arr1, arr2) => arr1.length <= arr2.length

const maybeArrayLte = lteWith(arrayLengthLte)

maybeArrayLte(nothing, ...)    // true
maybeArrayLte(nothing, just([])) // true
maybeArrayLte(just([]), nothing) // false
maybeArrayLte(just([]), just([])) // true
maybeArrayLte(just([]), just([1])) // true
maybeArrayLte(just([2]), just([1])) // true

lte can be rewritten as:

const lte = (maybeA, maybeB) => lteWith(
  (a,b) => a <= b,
  maybeA,
  maybeB
)