curry-rice v1.0.0
A curly function with a strict type definition. There is no upcast to any
types, respecting the typedef of the callback function.
:sparkles: Features
- :zap: Multi runtime support (Deno,Node.jsand Browsers)
- :books: Pure TypeScript and provides type definition
- :earth_americas: Universal module, providing ES modulesandCommonjs
- :package: Optimized, super slim size
- :page_facing_up: TSDoc-style comments
Package name
Deno: curry (deno.land,
nest.land)
Node.js: curry-rice (npm)
The origin of the word curry-rice is Rice and curry 🍛.
:zap: Overview
ReturnValue
const replace = (from: string, to: string, val: string) =>
  val.replace(from, to);
const curriedReplace = curry(replace);
curriedReplace("hello", "hi", "hello world"); // 'hi world'
curriedReplace("hello")("hi", "hello world"); // 'hi world'
curriedReplace("hello", "hi")("hello world"); // 'hi world'
curriedReplace("hello")("hi")("hello world"); // 'hi world'
curriedReplace("hello", "hi", "hello world"); // 'hi world'ReturnType
curriedReplace("hello"); // (to: string, val: string): string
curriedReplace("hello")("hi"); // (val: string): string
curriedReplace("hello", "hi"); // (val: string): string
curriedReplace("hello", "hi", "hello world"); // string
curriedReplace("hello")("hi")("hello world"); // string
curriedReplace("hello", "hi")("hello world"); // string
curriedReplace("hello")("hi", "hello world"); // string:dizzy: Usage
curry provides multi platform modules.
🦕 Deno
deno.land
import { curry } from "https://deno.land/x/curry/mod.ts";
curry(AnyFn);nest.land
import { curry } from "https://x.nest.land/curry/mod.ts";
curry(AnyFn);:package: Node.js
NPM package name is
curry-rice.
Install
npm i curry-rice
or
yarn add curry-riceES modules
import { curry } from "curry-rice";
curry(AnyFn);Commonjs
const { curry } = require("curry-rice");
curry(AnyFn);:globe_with_meridians: Browser
The module that bundles the dependencies is obtained from skypack.
<script type="module">
  import { curry } from "https://cdn.skypack.dev/curry-rice";
  curry(AnyFn)
</script>API
Type definition
curry
declare const curry: <T extends unknown[], R>(
  fn: (...args: T) => R,
) => Curried<T, R>;| Parameter | Description | 
|---|---|
| fn | Any function | 
=> The new curried function
Example
const nullary = () => true;
curry(nullary); // ()  => boolean
const unary = (val: number) => val++;
curry(unary); // (val: number)  => number
const binaryFn = (a: number, b: number) => a + b;
curry(binaryFn); // (a: number, b: number)  => number || (a: number) => (b:number) => numberRestriction
This package is focused on getting correct type inference. Hence, there are the following limitations:
- Maximum number of arity is 19.
Beyond that, the type system will breaks.
- Overloads functioncannot be correctly type inferred.
Overloads function is something like this:
function len(s: string): number;
function len(arr: any[]): number;
function len(x: any) {
  return x.length;
}For example, it has the following differences from
lodash.curry.
- lodash.curryhas a placeholder feature, which this package does not have.
- The argument of the curried function in lodash.curryisanytypes, but in this package, the type of the original argument is inferred.
Although placeholders are a useful feature, it is very difficult to implement it while maintaining correct type inference.
If you can solve this issue, please make a pull request.
:green_heart: Supports
ie is no longer supported to reduce bundle size.
The TypeScript version must be 4.1.0 or higher.
This project provides ES modules and Commonjs.
If you have an opinion about what to support, you can open an issue to discuss it.
The browserslist has the following settings.
defaults
last 8 version
not IE <= 11
not ie_mob <= 11
node 6| Deno | Node.js | Edge | Firefox | Chrome | Safari | iOS Safari | Samsung | Opera | 
|---|---|---|---|---|---|---|---|---|
| ^1.6.0 | ^6.17.0 | ^83 | ^78 | ^83 | ^11 | ^12.0 | ^7.2 | ^68 | 
:handshake: Contributing
Contributions, issues and feature requests are welcome!Feel free to check issues.
:seedling: Show your support
Give a ⭐️ if this project helped you!
:bulb: License
Copyright © 2021-present TomokiMiyauci.
Released under the MIT license