curry

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 19, 2022 License: MIT Imports: 0 Imported by: 1

README

Go Reference Go Report Card

Curry

Curry provides facilities for currying Go functions. The process converts a single function like f(x, y, z) into N many functions each taking a single argument like h(x)(y)(z).

Currying can be useful as a way to provide partial function application. For example, this takes a function that adds two integers and creates a new function plus1 that increments the given value by 1.

package main

import (
  "fmt"

  "github.com/calebcase/curry"
)

func Add(x, y int) int {
  return x + y
}

func main() {
  // Create a reusable function with the first argument bound to 1.
  plus1 := curry.A2R1(Add)(1)

  fmt.Println(plus1(2)) // 3
  fmt.Println(plus1(3)) // 4
  fmt.Println(plus1(4)) // 5
}

For more examples and usage see the go docs.

Build

The library is entirely generated with jennifer:

go generate
go test -v

Documentation

Overview

Package curry provides facilities for currying functions. The process converts a single function like `f(x, y, z)` into N many functions each taking a single argument like `h(x)(y)(z)`.

The functions are named by the number of arguments and return parameters of the target function. For example, to wrap a function with 2 arguments and 1 return `func F(x, y int) int` use `curry.A2R1(F)`.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func A10R1

func A10R1[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8, a9 A9) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) func(a9 A9) R0

func A10R2

func A10R2[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8, a9 A9) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) func(a9 A9) (R0, R1)

func A10R3 added in v0.2.0

func A10R3[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8, a9 A9) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) func(a9 A9) (R0, R1, R2)

func A10R4 added in v0.2.0

func A10R4[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8, a9 A9) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) func(a9 A9) (R0, R1, R2, R3)

func A10R5 added in v0.2.0

func A10R5[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8, a9 A9) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) func(a9 A9) (R0, R1, R2, R3, R4)

func A2R1

func A2R1[A0, A1, R0 any](f func(a0 A0, a1 A1) R0) func(a0 A0) func(a1 A1) R0
Example
package main

import (
	"fmt"

	"github.com/calebcase/curry"
)

func main() {
	add := func(a, b int) int {
		return a + b
	}

	cadd := curry.A2R1(add)

	plus1 := cadd(1)
	plus5 := cadd(5)

	fmt.Println(plus1(2))
	fmt.Println(plus5(10))

}
Output:

3
15

func A2R2

func A2R2[A0, A1, R0, R1 any](f func(a0 A0, a1 A1) (R0, R1)) func(a0 A0) func(a1 A1) (R0, R1)

func A2R3 added in v0.2.0

func A2R3[A0, A1, R0, R1, R2 any](f func(a0 A0, a1 A1) (R0, R1, R2)) func(a0 A0) func(a1 A1) (R0, R1, R2)

func A2R4 added in v0.2.0

func A2R4[A0, A1, R0, R1, R2, R3 any](f func(a0 A0, a1 A1) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) (R0, R1, R2, R3)

func A2R5 added in v0.2.0

func A2R5[A0, A1, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) (R0, R1, R2, R3, R4)

func A3R1

func A3R1[A0, A1, A2, R0 any](f func(a0 A0, a1 A1, a2 A2) R0) func(a0 A0) func(a1 A1) func(a2 A2) R0

func A3R2

func A3R2[A0, A1, A2, R0, R1 any](f func(a0 A0, a1 A1, a2 A2) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) (R0, R1)

func A3R3 added in v0.2.0

func A3R3[A0, A1, A2, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) (R0, R1, R2)

func A3R4 added in v0.2.0

func A3R4[A0, A1, A2, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) (R0, R1, R2, R3)

func A3R5 added in v0.2.0

func A3R5[A0, A1, A2, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) (R0, R1, R2, R3, R4)

func A4R1

func A4R1[A0, A1, A2, A3, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) R0

func A4R2

func A4R2[A0, A1, A2, A3, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) (R0, R1)

func A4R3 added in v0.2.0

func A4R3[A0, A1, A2, A3, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) (R0, R1, R2)

func A4R4 added in v0.2.0

func A4R4[A0, A1, A2, A3, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) (R0, R1, R2, R3)

func A4R5 added in v0.2.0

func A4R5[A0, A1, A2, A3, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) (R0, R1, R2, R3, R4)

func A5R1

func A5R1[A0, A1, A2, A3, A4, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) R0

func A5R2

func A5R2[A0, A1, A2, A3, A4, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) (R0, R1)

func A5R3 added in v0.2.0

func A5R3[A0, A1, A2, A3, A4, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) (R0, R1, R2)

func A5R4 added in v0.2.0

func A5R4[A0, A1, A2, A3, A4, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) (R0, R1, R2, R3)

func A5R5 added in v0.2.0

func A5R5[A0, A1, A2, A3, A4, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) (R0, R1, R2, R3, R4)

func A6R1

func A6R1[A0, A1, A2, A3, A4, A5, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) R0

func A6R2

func A6R2[A0, A1, A2, A3, A4, A5, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) (R0, R1)

func A6R3 added in v0.2.0

func A6R3[A0, A1, A2, A3, A4, A5, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) (R0, R1, R2)

func A6R4 added in v0.2.0

func A6R4[A0, A1, A2, A3, A4, A5, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) (R0, R1, R2, R3)

func A6R5 added in v0.2.0

func A6R5[A0, A1, A2, A3, A4, A5, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) (R0, R1, R2, R3, R4)

func A7R1

func A7R1[A0, A1, A2, A3, A4, A5, A6, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) R0

func A7R2

func A7R2[A0, A1, A2, A3, A4, A5, A6, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) (R0, R1)

func A7R3 added in v0.2.0

func A7R3[A0, A1, A2, A3, A4, A5, A6, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) (R0, R1, R2)

func A7R4 added in v0.2.0

func A7R4[A0, A1, A2, A3, A4, A5, A6, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) (R0, R1, R2, R3)

func A7R5 added in v0.2.0

func A7R5[A0, A1, A2, A3, A4, A5, A6, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) (R0, R1, R2, R3, R4)

func A8R1

func A8R1[A0, A1, A2, A3, A4, A5, A6, A7, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) R0

func A8R2

func A8R2[A0, A1, A2, A3, A4, A5, A6, A7, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) (R0, R1)

func A8R3 added in v0.2.0

func A8R3[A0, A1, A2, A3, A4, A5, A6, A7, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) (R0, R1, R2)

func A8R4 added in v0.2.0

func A8R4[A0, A1, A2, A3, A4, A5, A6, A7, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) (R0, R1, R2, R3)

func A8R5 added in v0.2.0

func A8R5[A0, A1, A2, A3, A4, A5, A6, A7, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) (R0, R1, R2, R3, R4)

func A9R1

func A9R1[A0, A1, A2, A3, A4, A5, A6, A7, A8, R0 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8) R0) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) R0

func A9R2

func A9R2[A0, A1, A2, A3, A4, A5, A6, A7, A8, R0, R1 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8) (R0, R1)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) (R0, R1)

func A9R3 added in v0.2.0

func A9R3[A0, A1, A2, A3, A4, A5, A6, A7, A8, R0, R1, R2 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8) (R0, R1, R2)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) (R0, R1, R2)

func A9R4 added in v0.2.0

func A9R4[A0, A1, A2, A3, A4, A5, A6, A7, A8, R0, R1, R2, R3 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8) (R0, R1, R2, R3)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) (R0, R1, R2, R3)

func A9R5 added in v0.2.0

func A9R5[A0, A1, A2, A3, A4, A5, A6, A7, A8, R0, R1, R2, R3, R4 any](f func(a0 A0, a1 A1, a2 A2, a3 A3, a4 A4, a5 A5, a6 A6, a7 A7, a8 A8) (R0, R1, R2, R3, R4)) func(a0 A0) func(a1 A1) func(a2 A2) func(a3 A3) func(a4 A4) func(a5 A5) func(a6 A6) func(a7 A7) func(a8 A8) (R0, R1, R2, R3, R4)

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL