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 🙏

© 2025 – Pkg Stats / Ryan Hefner

some-functional-functions

v0.0.2

Published

some haskell-wannabe functions in JS

Downloads

3

Readme

some-functional-functions

some haskell-wannabe functions in JS (typescript)

getting started

  1. import the module:
import { func, pipe, compose } from "func";
// OR
const func = require("func");
  1. use the stuff:
const log = func((a, b, c) => console.log(a, b, c));
log("Wooa")("aaahh")("!");
// Wooa aaahh !

the functions

func

Makes a function curried. Pretty cool stuff.

It takes a function, and optionally the number of args. Use the second parameter if it's a function that takes as many args as you put.

const log1 = func((a, b, c) => console.log(a, b, c));
const log2 = func(console.log, 3);

pipe

Pipes the output of each function into the next.

The first function can take as many args as you want, but after that they should only take one. You can do some fun stuff if you use func() to make the functions to pass into pipe(), but keep in mind you'll be dealing with partially applied functions at that point.

const doSomeStuff = pipe(
  x => x * 2,
  x => x ** 2,
  x => x.toString()
);

console.log(doSomeStuff(3));
// "36"

compose

Same thing as pipe, but right to left. Like some fancy math stuff.

const doSomeStuff = compose(
  x => x.toString(),
  x => x ** 2,
  x => x * 2
);

console.log(doSomeStuff(3));
// "36"

flip

Takes a function that takes 2 arguments (or more) and flips the first 2 arguments.

const flipped = flip((x, y) => `${x}, ${y}`);

console.log(flipped(1, 2));
// "2, 1"

map

Maps an array to a function

const times2 = map(x => x * 2);

console.log(times2([1, 2, 3, 4, 5]));
// [2, 4, 6, 8, 10]

foldl

Folds (reduces) an array from the left.

const sum = foldl((acc, x) => acc + x, 0);

console.log(sum([1, 2, 3]));

// 6

foldr

Folds (reduces) an array from the right. Note that the reducer takes the item first, then the accumulator, then the index. It's like haskell!!!!!

const div = foldr((x, acc) => x / acc, 1);

console.log(div([1, 2, 3, 4, 5]));
// 1.875
// this is equivalent to 1/(2/(3/(4/(5/1)))), not 1/2/3/4/5/1

reverse

Reverses an array.

console.log(reverse([1, 2, 3, 4, 5]));
// [5, 4, 3, 2, 1]

listc

List comprehensions. Coming soon. Maybe.