Skip to content

Debdut/omg-curry

Repository files navigation

omg-curry

Generic badge Generic badge

Twitter Twitter

Feature Complete Curry Library

Logo

Features

  • Fixed Functions ⟶ Curry
  • Operators ⟶ Curry
  • Curry ⟶ Fixed Functions
  • Infinite Currying
  • Lazy Curry

Installation

npm install omg-curry

Usage

const curry = require('omg-curry')

Fixed Functions

Convert a function into curry

function map (fn, default, list) {}

const mapK = curry.fixed(map)
const square = a => a**2

mapK(square)(0)([1, 2, 3, 4, null])
// [1, 4, 9, 16, 0]

// or reuse

const mapSquare = mapK(square)(0)
mapSquare([1, 2, 3, 4, null])
// [1, 4, 9, 16, 0]

Operators

Create N-length Curry from an operator

const add = (a, b) => a+b
const add4 = curry.op(add, 4)

add4(1)(3)(5)(10)
add4(1)(3,5)(10)
add4(1,3,5,10)
// 19

const addInfty = curry.op(add, Infinity)

// () to end
addInfty(1)(1)(1,1)(1)(1)()
// 6

const add4Lazy = curry.op(add, 4, true)
// same as add4 buts evaluates at the end
const altSum = (a, b, i) => a + (-1)**i * b
const altSum5 = curry.op(altSum, 5)
// (a, b, c, d, e) => a - b + c - d + e

altSum5(1)(2)(3)(4,5)
// 1 - 2 + 3 - 4 + 5
// 3

DeCurry

Convert Curry to Fixed Functions

const add4Fixed = curry.deCurry(add4Curry)

WTF is Curry?

A Curry takes arguments one by one unlike functions which take all arguments at once.

// Function
add(1, 2, 3)
// 6

// Curry
add(1)(2)(3)
// 6

Support

  • Browser
  • Node