curry

package module
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Jul 3, 2025 License: MIT Imports: 0 Imported by: 0

README

curry

CI Go Reference Go Report Card License

A lightweight Go library that brings the power of function currying to your codebase.

What is Currying?

Currying is a functional programming technique where a function with multiple arguments is transformed into a sequence of functions, each taking a single argument.

Example:

// Regular function
func add(a, b int) int {
    return a + b
}

// Curried version
func add(a int) func(int) int {
    return func(b int) int {
        return a + b
    }
}

addTwo := add(2)
result := addTwo(3) // result is 5

This approach allows for more flexible and reusable code, enabling partial application of functions.

Features

Function signature manipulation
  • Currying Functions: Transform standard Go functions into their curried counterparts.
  • Uncurrying Functions: Revert curried functions back to their original form.
  • Partial Application: Create new functions by pre-filling some arguments.
  • Return Values Dropping: Ignore first or last function return values.
  • Lazy Arguments Evaluation: Convert function parameters to thunk functions.
Sequence processing
  • Tail: Pop an element and get the tail of a sequence.
  • Take N: Cut a sequence after pulling first N elements.
  • Filter: Filter sequence values.
  • Map: Convert sequence values.
  • Until: Pull values until condition is true.
  • Last: Consume the sequence and return the last value.
  • Accumulate: Compute an accumulated value.
  • Zip: Join two sequences to a sequence of pairs.
Sequence generation
  • Range: Generate integers in a range, with a given step.
  • Generate: Generate a sequence of a function return values.
  • Channels: Convert a sequence to a channel, or the other way around.

Installation

go get github.com/parametalol/curry

Usage

See examples for usages.

Contributing

Contributions are welcome! Please fork the repository and submit a pull request.

License

This project is licensed under the MIT License.

Documentation

Overview

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Code generated by curry generator; DO NOT EDIT.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Adapt1 added in v0.0.3

func Adapt1[T0 any, Fn FuncAny1[T0]](fn Fn) func(T0)

Adapt1 upgrades the fn function signature to `func(T0)`.

 T0  0
 -   1
any  2

func Adapt1F added in v0.0.3

func Adapt1F[T0 any, Fn FuncAny1[T0]](_ func(T0), fn Fn) func(T0)

Adapt1F upgrades the fn function signature to the signature of the first argument.

func Adapt1R added in v0.0.3

func Adapt1R[T0, R any, Fn FuncAny1AnyR[T0, R]](fn Fn) func(T0) R

Adapt1R upgrades the fn function signature to `func(T0) R`.

 T0,  R    0
 T0,  -    1
 T0, any   2
 - ,  R    3
 - ,  -    4
 - , any   5
any,  R    6
any,  -    7
any, any   8
Example
package main

import (
	"fmt"
	"slices"

	"github.com/parametalol/curry"
)

func main() {
	i := 0
	odd := func() bool {
		i++
		return i&1 == 0
	}

	// slices.DeleteFunc expects func(int) bool. Let's adapt odd: the int
	// argument will be ignored.
	fmt.Println(
		slices.DeleteFunc([]int{1, 2, 3, 4, 5},
			curry.Adapt1R[int, bool](odd)))
}
Output:

[1 3 5]

func Adapt1RF added in v0.0.3

func Adapt1RF[T0, R any, Fn FuncAny1AnyR[T0, R]](_ func(T0) R, fn Fn) func(T0) R

Adapt1RF upgrades the fn function signature to the signature of the first argument.

func Adapt2 added in v0.0.3

func Adapt2[T0, T1 any, Fn FuncAny2[T0, T1]](fn Fn) func(T0, T1)

Adapt2 upgrades the fn function signature to `func(T0, T1)`.

 T0,  T1  0
 T0,  -   1
 T0, any  2
 - ,  T1  3
 - ,  -   4
any,  T1  5
any,  -   6
any, any  7

func Adapt2F added in v0.0.3

func Adapt2F[T0, T1 any, Fn FuncAny2[T0, T1]](_ func(T0, T1), fn Fn) func(T0, T1)

Adapt2F deduces the target function signature types from the first argument.

func Adapt2R added in v0.0.3

func Adapt2R[T0, T1, R any, Fn FuncAny2AnyR[T0, T1, R]](fn Fn) func(T0, T1) R

Adapt2R upgrades the fn function signature to `func(T0, T1) R`.

 T0,  T1,  R   0
 T0,  T1,  -   1
 T0,  T1, any  2
 T0,  - ,  R   3
 T0,  - ,  -   4
 T0,  - , any  5
 T0, any,  R   6
 T0, any,  -   7
 T0, any, any  8
 - ,  T1,  R   9
 - ,  T1,  -   10
 - ,  T1, any  11
 - ,  - ,  R   12
 - ,  - ,  -   13
 - ,  - , any  14
 - , any,  R   15
 - , any,  -   16
 - , any, any  17
any,  T1,  R   18
any,  T1,  -   19
any,  T1, any  20
any,  - ,  R   see 15
any,  - ,  -   see 16
any,  - , any  see 17
any, any,  R   24
any, any,  -   25
any, any, any  26

func Adapt2RF added in v0.0.3

func Adapt2RF[T0, T1, R any, Fn FuncAny2AnyR[T0, T1, R]](_ func(T0, T1) R, fn Fn) func(T0, T1) R

Adapt2RF deduces the target function signature types from the first argument.

func AdaptR added in v0.0.3

func AdaptR[R any, Fn FuncAnyR[R]](fn Fn) func() R

AdaptR upgrades the fn function signature to `func() R`.

 R  0
 -  1
any 2

func AdaptRF added in v0.0.3

func AdaptRF[R any, Fn FuncAnyR[R]](_ func() R, fn Fn) func() R

AdaptRF upgrades the fn function signature to the signature of the first argument.

func Bind1 added in v0.0.2

func Bind1[T0 any](fn func(T0), arg0 T0) func()

Bind1 binds the first argument of a function of 1, returning no values.

func Bind1R added in v0.0.2

func Bind1R[T0, R any](fn func(T0) R, arg0 T0) func() R

Bind1R binds the first argument of a function of 1, returning one value.

func Bind1R2 added in v0.0.2

func Bind1R2[T0, R0, R1 any](fn func(T0) (R0, R1), arg0 T0) func() (R0, R1)

Bind1R2 binds the first argument of a function of 1, returning two values.

func Bind1S added in v0.0.2

func Bind1S[T0 any](fn func(...T0), arg0 ...T0) func()

Bind1S binds the first argument of a function of 1, returning no values.

func Bind1SR added in v0.0.2

func Bind1SR[T0, R any](fn func(...T0) R, arg0 ...T0) func() R

Bind1SR binds the first argument of a function of 1, returning one value.

func Bind1SR2 added in v0.0.2

func Bind1SR2[T0, R0, R1 any](fn func(...T0) (R0, R1), arg0 ...T0) func() (R0, R1)

Bind1SR2 binds the first argument of a function of 1, returning one value.

func BindFirstOf2 added in v0.0.2

func BindFirstOf2[T0, T1 any](fn func(T0, T1), arg0 T0) func(T1)

BindFirstOf2 binds the first argument of a function of 2, returning no values.

func BindFirstOf2R added in v0.0.2

func BindFirstOf2R[T0, T1, R any](fn func(T0, T1) R, arg0 T0) func(T1) R

BindFirstOf2R binds the first argument of a function of 2, returning one value.

Example
package main

import (
	"fmt"

	"github.com/parametalol/curry"
)

func main() {
	subtract := func(a, b int) int {
		return a - b
	}

	subtractFromTen := curry.BindFirstOf2R(subtract, 10)
	result := subtractFromTen(3)
	fmt.Println(result)
}
Output:

7

func BindFirstOf2R2 added in v0.0.2

func BindFirstOf2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1), arg0 T0) func(T1) (R0, R1)

BindFirstOf2R2 binds the first argument of a function of 2, returning two values.

func BindFirstOf2S added in v0.0.2

func BindFirstOf2S[T0, T1 any](fn func(T0, ...T1), arg0 T0) func(...T1)

BindFirstOf2S binds the first argument of a function of 2, returning no values.

func BindFirstOf2SR added in v0.0.2

func BindFirstOf2SR[T0, T1, R any](fn func(T0, ...T1) R, arg0 T0) func(...T1) R

BindFirstOf2SR binds the first argument of a function of 2, returning one value.

func BindFirstOf2SR2 added in v0.0.2

func BindFirstOf2SR2[T0, T1, R0, R1 any](fn func(T0, ...T1) (R0, R1), arg0 T0) func(...T1) (R0, R1)

BindFirstOf2SR2 binds the first argument of a function of 2, returning one value.

func BindFirstOf3 added in v0.0.2

func BindFirstOf3[T0, T1, T2 any](fn func(T0, T1, T2), arg0 T0) func(T1, T2)

BindFirstOf3 binds the first argument of a function of 3, returning no values.

func BindFirstOf3R added in v0.0.2

func BindFirstOf3R[T0, T1, T2, R any](fn func(T0, T1, T2) R, arg0 T0) func(T1, T2) R

BindFirstOf3R binds the first argument of a function of 3, returning one value.

func BindFirstOf3R2 added in v0.0.2

func BindFirstOf3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1), arg0 T0) func(T1, T2) (R0, R1)

BindFirstOf3R2 binds the first argument of a function of 3, returning two values.

func BindFirstOf3S added in v0.0.2

func BindFirstOf3S[T0, T1, T2 any](fn func(T0, T1, ...T2), arg0 T0) func(T1, ...T2)

BindFirstOf3S binds the first argument of a function of 3, returning no values.

func BindFirstOf3SR added in v0.0.2

func BindFirstOf3SR[T0, T1, T2, R any](fn func(T0, T1, ...T2) R, arg0 T0) func(T1, ...T2) R

BindFirstOf3SR binds the first argument of a function of 3, returning one value.

func BindFirstOf3SR2 added in v0.0.2

func BindFirstOf3SR2[T0, T1, T2, R0, R1 any](fn func(T0, T1, ...T2) (R0, R1), arg0 T0) func(T1, ...T2) (R0, R1)

BindFirstOf3SR2 binds the first argument of a function of 3, returning one value.

func BindFirstOf4 added in v0.0.2

func BindFirstOf4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3), arg0 T0) func(T1, T2, T3)

BindFirstOf4 binds the first argument of a function of 4, returning no values.

func BindFirstOf4R added in v0.0.2

func BindFirstOf4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R, arg0 T0) func(T1, T2, T3) R

BindFirstOf4R binds the first argument of a function of 4, returning one value.

func BindFirstOf4R2 added in v0.0.2

func BindFirstOf4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1), arg0 T0) func(T1, T2, T3) (R0, R1)

BindFirstOf4R2 binds the first argument of a function of 4, returning two values.

func BindFirstOf4S added in v0.0.2

func BindFirstOf4S[T0, T1, T2, T3 any](fn func(T0, T1, T2, ...T3), arg0 T0) func(T1, T2, ...T3)

BindFirstOf4S binds the first argument of a function of 4, returning no values.

func BindFirstOf4SR added in v0.0.2

func BindFirstOf4SR[T0, T1, T2, T3, R any](fn func(T0, T1, T2, ...T3) R, arg0 T0) func(T1, T2, ...T3) R

BindFirstOf4SR binds the first argument of a function of 4, returning one value.

func BindFirstOf4SR2 added in v0.0.2

func BindFirstOf4SR2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, ...T3) (R0, R1), arg0 T0) func(T1, T2, ...T3) (R0, R1)

BindFirstOf4SR2 binds the first argument of a function of 4, returning one value.

func BindFirstOf5 added in v0.0.2

func BindFirstOf5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4), arg0 T0) func(T1, T2, T3, T4)

BindFirstOf5 binds the first argument of a function of 5, returning no values.

func BindFirstOf5R added in v0.0.2

func BindFirstOf5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R, arg0 T0) func(T1, T2, T3, T4) R

BindFirstOf5R binds the first argument of a function of 5, returning one value.

func BindFirstOf5R2 added in v0.0.2

func BindFirstOf5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1), arg0 T0) func(T1, T2, T3, T4) (R0, R1)

BindFirstOf5R2 binds the first argument of a function of 5, returning two values.

func BindFirstOf5S added in v0.0.2

func BindFirstOf5S[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, ...T4), arg0 T0) func(T1, T2, T3, ...T4)

BindFirstOf5S binds the first argument of a function of 5, returning no values.

func BindFirstOf5SR added in v0.0.2

func BindFirstOf5SR[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, ...T4) R, arg0 T0) func(T1, T2, T3, ...T4) R

BindFirstOf5SR binds the first argument of a function of 5, returning one value.

func BindFirstOf5SR2 added in v0.0.2

func BindFirstOf5SR2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, ...T4) (R0, R1), arg0 T0) func(T1, T2, T3, ...T4) (R0, R1)

BindFirstOf5SR2 binds the first argument of a function of 5, returning one value.

func BindLastOf2 added in v0.0.2

func BindLastOf2[T0, T1 any](fn func(T0, T1), arg1 T1) func(T0)

BindLastOf2 binds the last argument of a function of 2, returning no values.

func BindLastOf2R added in v0.0.2

func BindLastOf2R[T0, T1, R any](fn func(T0, T1) R, arg1 T1) func(T0) R

BindLastOf2R binds the last argument of a function of 2, returning one value.

func BindLastOf2R2 added in v0.0.2

func BindLastOf2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1), arg1 T1) func(T0) (R0, R1)

BindLastOf2R2 binds the last ellipsis argument of a function of 2, returning two values.

func BindLastOf2S added in v0.0.2

func BindLastOf2S[T0, T1 any](fn func(T0, ...T1), arg1 ...T1) func(T0)

BindLastOf2S binds the last ellipsis argument of a function of 2, returning no values.

func BindLastOf2SR added in v0.0.2

func BindLastOf2SR[T0, T1, R any](fn func(T0, ...T1) R, arg1 ...T1) func(T0) R

BindLastOf2SR binds the last ellipsis argument of a function of 2, returning one value.

func BindLastOf2SR2 added in v0.0.2

func BindLastOf2SR2[T0, T1, R0, R1 any](fn func(T0, ...T1) (R0, R1), arg1 ...T1) func(T0) (R0, R1)

BindLastOf2SR2 binds the last ellipsis argument of a function of 2, returning two values.

func BindLastOf3 added in v0.0.2

func BindLastOf3[T0, T1, T2 any](fn func(T0, T1, T2), arg2 T2) func(T0, T1)

BindLastOf3 binds the last argument of a function of 3, returning no values.

func BindLastOf3R added in v0.0.2

func BindLastOf3R[T0, T1, T2, R any](fn func(T0, T1, T2) R, arg2 T2) func(T0, T1) R

BindLastOf3R binds the last argument of a function of 3, returning one value.

func BindLastOf3R2 added in v0.0.2

func BindLastOf3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1), arg2 T2) func(T0, T1) (R0, R1)

BindLastOf3R2 binds the last ellipsis argument of a function of 3, returning two values.

func BindLastOf3S added in v0.0.2

func BindLastOf3S[T0, T1, T2 any](fn func(T0, T1, ...T2), arg2 ...T2) func(T0, T1)

BindLastOf3S binds the last ellipsis argument of a function of 3, returning no values.

func BindLastOf3SR added in v0.0.2

func BindLastOf3SR[T0, T1, T2, R any](fn func(T0, T1, ...T2) R, arg2 ...T2) func(T0, T1) R

BindLastOf3SR binds the last ellipsis argument of a function of 3, returning one value.

func BindLastOf3SR2 added in v0.0.2

func BindLastOf3SR2[T0, T1, T2, R0, R1 any](fn func(T0, T1, ...T2) (R0, R1), arg2 ...T2) func(T0, T1) (R0, R1)

BindLastOf3SR2 binds the last ellipsis argument of a function of 3, returning two values.

func BindLastOf4 added in v0.0.2

func BindLastOf4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3), arg3 T3) func(T0, T1, T2)

BindLastOf4 binds the last argument of a function of 4, returning no values.

func BindLastOf4R added in v0.0.2

func BindLastOf4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R, arg3 T3) func(T0, T1, T2) R

BindLastOf4R binds the last argument of a function of 4, returning one value.

func BindLastOf4R2 added in v0.0.2

func BindLastOf4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1), arg3 T3) func(T0, T1, T2) (R0, R1)

BindLastOf4R2 binds the last ellipsis argument of a function of 4, returning two values.

func BindLastOf4S added in v0.0.2

func BindLastOf4S[T0, T1, T2, T3 any](fn func(T0, T1, T2, ...T3), arg3 ...T3) func(T0, T1, T2)

BindLastOf4S binds the last ellipsis argument of a function of 4, returning no values.

func BindLastOf4SR added in v0.0.2

func BindLastOf4SR[T0, T1, T2, T3, R any](fn func(T0, T1, T2, ...T3) R, arg3 ...T3) func(T0, T1, T2) R

BindLastOf4SR binds the last ellipsis argument of a function of 4, returning one value.

func BindLastOf4SR2 added in v0.0.2

func BindLastOf4SR2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, ...T3) (R0, R1), arg3 ...T3) func(T0, T1, T2) (R0, R1)

BindLastOf4SR2 binds the last ellipsis argument of a function of 4, returning two values.

func BindLastOf5 added in v0.0.2

func BindLastOf5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4), arg4 T4) func(T0, T1, T2, T3)

BindLastOf5 binds the last argument of a function of 5, returning no values.

func BindLastOf5R added in v0.0.2

func BindLastOf5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R, arg4 T4) func(T0, T1, T2, T3) R

BindLastOf5R binds the last argument of a function of 5, returning one value.

func BindLastOf5R2 added in v0.0.2

func BindLastOf5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1), arg4 T4) func(T0, T1, T2, T3) (R0, R1)

BindLastOf5R2 binds the last ellipsis argument of a function of 5, returning two values.

func BindLastOf5S added in v0.0.2

func BindLastOf5S[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, ...T4), arg4 ...T4) func(T0, T1, T2, T3)

BindLastOf5S binds the last ellipsis argument of a function of 5, returning no values.

func BindLastOf5SR added in v0.0.2

func BindLastOf5SR[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, ...T4) R, arg4 ...T4) func(T0, T1, T2, T3) R

BindLastOf5SR binds the last ellipsis argument of a function of 5, returning one value.

func BindLastOf5SR2 added in v0.0.2

func BindLastOf5SR2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, ...T4) (R0, R1), arg4 ...T4) func(T0, T1, T2, T3) (R0, R1)

BindLastOf5SR2 binds the last ellipsis argument of a function of 5, returning two values.

func DropFirstOf1 added in v0.0.2

func DropFirstOf1[T0 any](_ T0)

DropFirstOf1 drops the first value from a tuple of 1.

func DropFirstOf2 added in v0.0.2

func DropFirstOf2[T0, T1 any](_ T0, arg1 T1) T1

DropFirstOf2 drops the first value from a tuple of 2.

func DropFirstOf3 added in v0.0.2

func DropFirstOf3[T0, T1, T2 any](_ T0, arg1 T1, arg2 T2) (T1, T2)

DropFirstOf3 drops the first value from a tuple of 3.

func DropFirstOf4 added in v0.0.2

func DropFirstOf4[T0, T1, T2, T3 any](_ T0, arg1 T1, arg2 T2, arg3 T3) (T1, T2, T3)

DropFirstOf4 drops the first value from a tuple of 4.

func DropFirstOf5 added in v0.0.2

func DropFirstOf5[T0, T1, T2, T3, T4 any](_ T0, arg1 T1, arg2 T2, arg3 T3, arg4 T4) (T1, T2, T3, T4)

DropFirstOf5 drops the first value from a tuple of 5.

func DropLastOf2 added in v0.0.2

func DropLastOf2[T0, T1 any](arg0 T0, arg1 T1) T0

DropLastOf2 drops the last value from a tuple of 2.

Example
package main

import (
	"fmt"

	"github.com/parametalol/curry"
)

func main() {
	f := func() (int, error) {
		return 1, nil
	}
	result := curry.DropLastOf2(f())
	fmt.Println(result)
}
Output:

1

func DropLastOf3 added in v0.0.2

func DropLastOf3[T0, T1, T2 any](arg0 T0, arg1 T1, arg2 T2) (T0, T1)

DropLastOf3 drops the last value from a tuple of 3.

func DropLastOf4 added in v0.0.2

func DropLastOf4[T0, T1, T2, T3 any](arg0 T0, arg1 T1, arg2 T2, arg3 T3) (T0, T1, T2)

DropLastOf4 drops the last value from a tuple of 4.

func DropLastOf5 added in v0.0.2

func DropLastOf5[T0, T1, T2, T3, T4 any](arg0 T0, arg1 T1, arg2 T2, arg3 T3, arg4 T4) (T0, T1, T2, T3)

DropLastOf5 drops the last value from a tuple of 5.

func Eq added in v0.0.2

func Eq[Value comparable](a, b Value) bool

func F2 added in v0.0.2

func F2[T0, T1 any](fn func(T0, T1)) func(T0) func(T1)

F2 curries a function of 2 parameter(s), returning no values.

func F2R added in v0.0.2

func F2R[T0, T1, R any](fn func(T0, T1) R) func(T0) func(T1) R

F2R curries a function of 2 parameter(s), returning one value.

Example
package main

import (
	"fmt"

	"github.com/parametalol/curry"
)

func main() {
	multiply := func(a, b int) int {
		return a * b
	}
	curriedMultiply := curry.F2R(multiply)
	multiplyByTwo := curriedMultiply(2)
	result := multiplyByTwo(5)
	fmt.Println(result)
}
Output:

10

func F2R2 added in v0.0.2

func F2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1)) func(T0) func(T1) (R0, R1)

F2R2 curries a function of 2 parameter(s), returning two values.

func F2S added in v0.0.2

func F2S[T0, T1 any](fn func(T0, ...T1)) func(T0) func(...T1)

F2S curries a function of 2 parameter(s), returning no values.

func F2SR added in v0.0.2

func F2SR[T0, T1, R any](fn func(T0, ...T1) R) func(T0) func(...T1) R

F2SR curries a function of 2 parameter(s), returning one value.

func F2SR2 added in v0.0.2

func F2SR2[T0, T1, R0, R1 any](fn func(T0, ...T1) (R0, R1)) func(T0) func(...T1) (R0, R1)

F2SR2 curries a function of 2 parameter(s), returning two values.

func F3 added in v0.0.2

func F3[T0, T1, T2 any](fn func(T0, T1, T2)) func(T0) func(T1) func(T2)

F3 curries a function of 3 parameter(s), returning no values.

func F3R added in v0.0.2

func F3R[T0, T1, T2, R any](fn func(T0, T1, T2) R) func(T0) func(T1) func(T2) R

F3R curries a function of 3 parameter(s), returning one value.

func F3R2 added in v0.0.2

func F3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1)) func(T0) func(T1) func(T2) (R0, R1)

F3R2 curries a function of 3 parameter(s), returning two values.

func F3S added in v0.0.2

func F3S[T0, T1, T2 any](fn func(T0, T1, ...T2)) func(T0) func(T1) func(...T2)

F3S curries a function of 3 parameter(s), returning no values.

func F3SR added in v0.0.2

func F3SR[T0, T1, T2, R any](fn func(T0, T1, ...T2) R) func(T0) func(T1) func(...T2) R

F3SR curries a function of 3 parameter(s), returning one value.

func F3SR2 added in v0.0.2

func F3SR2[T0, T1, T2, R0, R1 any](fn func(T0, T1, ...T2) (R0, R1)) func(T0) func(T1) func(...T2) (R0, R1)

F3SR2 curries a function of 3 parameter(s), returning two values.

func F4 added in v0.0.2

func F4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3)) func(T0) func(T1) func(T2) func(T3)

F4 curries a function of 4 parameter(s), returning no values.

func F4R added in v0.0.2

func F4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R) func(T0) func(T1) func(T2) func(T3) R

F4R curries a function of 4 parameter(s), returning one value.

func F4R2 added in v0.0.2

func F4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1)) func(T0) func(T1) func(T2) func(T3) (R0, R1)

F4R2 curries a function of 4 parameter(s), returning two values.

func F4S added in v0.0.2

func F4S[T0, T1, T2, T3 any](fn func(T0, T1, T2, ...T3)) func(T0) func(T1) func(T2) func(...T3)

F4S curries a function of 4 parameter(s), returning no values.

func F4SR added in v0.0.2

func F4SR[T0, T1, T2, T3, R any](fn func(T0, T1, T2, ...T3) R) func(T0) func(T1) func(T2) func(...T3) R

F4SR curries a function of 4 parameter(s), returning one value.

func F4SR2 added in v0.0.2

func F4SR2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, ...T3) (R0, R1)) func(T0) func(T1) func(T2) func(...T3) (R0, R1)

F4SR2 curries a function of 4 parameter(s), returning two values.

func F5 added in v0.0.2

func F5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4)) func(T0) func(T1) func(T2) func(T3) func(T4)

F5 curries a function of 5 parameter(s), returning no values.

func F5R added in v0.0.2

func F5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R) func(T0) func(T1) func(T2) func(T3) func(T4) R

F5R curries a function of 5 parameter(s), returning one value.

func F5R2 added in v0.0.2

func F5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1)) func(T0) func(T1) func(T2) func(T3) func(T4) (R0, R1)

F5R2 curries a function of 5 parameter(s), returning two values.

func F5S added in v0.0.2

func F5S[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, ...T4)) func(T0) func(T1) func(T2) func(T3) func(...T4)

F5S curries a function of 5 parameter(s), returning no values.

func F5SR added in v0.0.2

func F5SR[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, ...T4) R) func(T0) func(T1) func(T2) func(T3) func(...T4) R

F5SR curries a function of 5 parameter(s), returning one value.

func F5SR2 added in v0.0.2

func F5SR2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, ...T4) (R0, R1)) func(T0) func(T1) func(T2) func(T3) func(...T4) (R0, R1)

F5SR2 curries a function of 5 parameter(s), returning two values.

func Head2 added in v0.0.2

func Head2[T0, T1 any](fn func(T0, T1)) func(T0) func(T1)

Head2 returns a partially curried function of 2 parameter(s), returning no values.

func Head2R added in v0.0.2

func Head2R[T0, T1, R any](fn func(T0, T1) R) func(T0) func(T1) R

Head2R returns a partially curried function of 2 parameter(s), returning one value.

func Head2R2 added in v0.0.2

func Head2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1)) func(T0) func(T1) (R0, R1)

Head2R2 returns a partially curried function of 2 parameter(s), returning one value.

func Head2S added in v0.0.2

func Head2S[T0, T1 any](fn func(T0, ...T1)) func(T0) func(...T1)

Head2S returns a partially curried function of 2 parameter(s), returning no values.

func Head2SR added in v0.0.2

func Head2SR[T0, T1, R any](fn func(T0, ...T1) R) func(T0) func(...T1) R

Head2SR returns a partially curried function of 2 parameter(s), returning one value.

func Head2SR2 added in v0.0.2

func Head2SR2[T0, T1, R0, R1 any](fn func(T0, ...T1) (R0, R1)) func(T0) func(...T1) (R0, R1)

Head2SR2 returns a partially curried function of 2 parameter(s), returning two values.

func Head3 added in v0.0.2

func Head3[T0, T1, T2 any](fn func(T0, T1, T2)) func(T0) func(T1, T2)

Head3 returns a partially curried function of 3 parameter(s), returning no values.

func Head3R added in v0.0.2

func Head3R[T0, T1, T2, R any](fn func(T0, T1, T2) R) func(T0) func(T1, T2) R

Head3R returns a partially curried function of 3 parameter(s), returning one value.

func Head3R2 added in v0.0.2

func Head3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1)) func(T0) func(T1, T2) (R0, R1)

Head3R2 returns a partially curried function of 3 parameter(s), returning one value.

func Head3S added in v0.0.2

func Head3S[T0, T1, T2 any](fn func(T0, T1, ...T2)) func(T0) func(T1, ...T2)

Head3S returns a partially curried function of 3 parameter(s), returning no values.

func Head3SR added in v0.0.2

func Head3SR[T0, T1, T2, R any](fn func(T0, T1, ...T2) R) func(T0) func(T1, ...T2) R

Head3SR returns a partially curried function of 3 parameter(s), returning one value.

func Head3SR2 added in v0.0.2

func Head3SR2[T0, T1, T2, R0, R1 any](fn func(T0, T1, ...T2) (R0, R1)) func(T0) func(T1, ...T2) (R0, R1)

Head3SR2 returns a partially curried function of 3 parameter(s), returning two values.

func Head4 added in v0.0.2

func Head4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3)) func(T0) func(T1, T2, T3)

Head4 returns a partially curried function of 4 parameter(s), returning no values.

func Head4R added in v0.0.2

func Head4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R) func(T0) func(T1, T2, T3) R

Head4R returns a partially curried function of 4 parameter(s), returning one value.

func Head4R2 added in v0.0.2

func Head4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1)) func(T0) func(T1, T2, T3) (R0, R1)

Head4R2 returns a partially curried function of 4 parameter(s), returning one value.

func Head4S added in v0.0.2

func Head4S[T0, T1, T2, T3 any](fn func(T0, T1, T2, ...T3)) func(T0) func(T1, T2, ...T3)

Head4S returns a partially curried function of 4 parameter(s), returning no values.

func Head4SR added in v0.0.2

func Head4SR[T0, T1, T2, T3, R any](fn func(T0, T1, T2, ...T3) R) func(T0) func(T1, T2, ...T3) R

Head4SR returns a partially curried function of 4 parameter(s), returning one value.

func Head4SR2 added in v0.0.2

func Head4SR2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, ...T3) (R0, R1)) func(T0) func(T1, T2, ...T3) (R0, R1)

Head4SR2 returns a partially curried function of 4 parameter(s), returning two values.

func Head5 added in v0.0.2

func Head5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4)) func(T0) func(T1, T2, T3, T4)

Head5 returns a partially curried function of 5 parameter(s), returning no values.

func Head5R added in v0.0.2

func Head5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R) func(T0) func(T1, T2, T3, T4) R

Head5R returns a partially curried function of 5 parameter(s), returning one value.

func Head5R2 added in v0.0.2

func Head5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1)) func(T0) func(T1, T2, T3, T4) (R0, R1)

Head5R2 returns a partially curried function of 5 parameter(s), returning one value.

func Head5S added in v0.0.2

func Head5S[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, ...T4)) func(T0) func(T1, T2, T3, ...T4)

Head5S returns a partially curried function of 5 parameter(s), returning no values.

func Head5SR added in v0.0.2

func Head5SR[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, ...T4) R) func(T0) func(T1, T2, T3, ...T4) R

Head5SR returns a partially curried function of 5 parameter(s), returning one value.

func Head5SR2 added in v0.0.2

func Head5SR2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, ...T4) (R0, R1)) func(T0) func(T1, T2, T3, ...T4) (R0, R1)

Head5SR2 returns a partially curried function of 5 parameter(s), returning two values.

func Lazy1 added in v0.0.2

func Lazy1[T0 any](fn func(T0)) func(func() T0)

Lazy1 converts function parameters to thunk functions.

Example
package main

import (
	"fmt"

	"github.com/parametalol/curry"
)

func main() {

	process := func(expensive string) {
		fmt.Println("That was", expensive)
	}
	expensive := func() string {
		fmt.Println("Computing...")
		return "expensive "
	}

	// The expensive process argument is not computed right now, but only when
	// defer executes.
	defer curry.Lazy1(process)(expensive)

	fmt.Println("The expensive process argument hasn't been computed yet.")

}
Output:

The expensive process argument hasn't been computed yet.
Computing...
That was expensive

func Lazy1R added in v0.0.2

func Lazy1R[T0, R any](fn func(T0) R) func(func() T0) R

Lazy1R converts function parameters to thunk functions.

func Lazy1R2 added in v0.0.2

func Lazy1R2[T0, R0, R1 any](fn func(T0) (R0, R1)) func(func() T0) (R0, R1)

Lazy1R2 converts function parameters to thunk functions.

func Lazy1S added in v0.0.2

func Lazy1S[T0 any](fn func(...T0)) func(func() []T0)

Lazy1S converts function parameters to thunk functions.

func Lazy1SR added in v0.0.2

func Lazy1SR[T0, R any](fn func(...T0) R) func(func() []T0) R

Lazy1SR converts function parameters to thunk functions.

func Lazy1SR2 added in v0.0.2

func Lazy1SR2[T0, R0, R1 any](fn func(...T0) (R0, R1)) func(func() []T0) (R0, R1)

Lazy1SR2 converts function parameters to thunk functions.

func Lazy2 added in v0.0.2

func Lazy2[T0, T1 any](fn func(T0, T1)) func(func() T0, func() T1)

Lazy2 converts function parameters to thunk functions.

func Lazy2R added in v0.0.2

func Lazy2R[T0, T1, R any](fn func(T0, T1) R) func(func() T0, func() T1) R

Lazy2R converts function parameters to thunk functions.

func Lazy2R2 added in v0.0.2

func Lazy2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1)) func(func() T0, func() T1) (R0, R1)

Lazy2R2 converts function parameters to thunk functions.

func Lazy2S added in v0.0.2

func Lazy2S[T0, T1 any](fn func(T0, ...T1)) func(func() T0, func() []T1)

Lazy2S converts function parameters to thunk functions.

func Lazy2SR added in v0.0.2

func Lazy2SR[T0, T1, R any](fn func(T0, ...T1) R) func(func() T0, func() []T1) R

Lazy2SR converts function parameters to thunk functions.

func Lazy2SR2 added in v0.0.2

func Lazy2SR2[T0, T1, R0, R1 any](fn func(T0, ...T1) (R0, R1)) func(func() T0, func() []T1) (R0, R1)

Lazy2SR2 converts function parameters to thunk functions.

func Lazy3 added in v0.0.2

func Lazy3[T0, T1, T2 any](fn func(T0, T1, T2)) func(func() T0, func() T1, func() T2)

Lazy3 converts function parameters to thunk functions.

func Lazy3R added in v0.0.2

func Lazy3R[T0, T1, T2, R any](fn func(T0, T1, T2) R) func(func() T0, func() T1, func() T2) R

Lazy3R converts function parameters to thunk functions.

func Lazy3R2 added in v0.0.2

func Lazy3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1)) func(func() T0, func() T1, func() T2) (R0, R1)

Lazy3R2 converts function parameters to thunk functions.

func Lazy3S added in v0.0.2

func Lazy3S[T0, T1, T2 any](fn func(T0, T1, ...T2)) func(func() T0, func() T1, func() []T2)

Lazy3S converts function parameters to thunk functions.

func Lazy3SR added in v0.0.2

func Lazy3SR[T0, T1, T2, R any](fn func(T0, T1, ...T2) R) func(func() T0, func() T1, func() []T2) R

Lazy3SR converts function parameters to thunk functions.

func Lazy3SR2 added in v0.0.2

func Lazy3SR2[T0, T1, T2, R0, R1 any](fn func(T0, T1, ...T2) (R0, R1)) func(func() T0, func() T1, func() []T2) (R0, R1)

Lazy3SR2 converts function parameters to thunk functions.

func Lazy4 added in v0.0.2

func Lazy4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3)) func(func() T0, func() T1, func() T2, func() T3)

Lazy4 converts function parameters to thunk functions.

func Lazy4R added in v0.0.2

func Lazy4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R) func(func() T0, func() T1, func() T2, func() T3) R

Lazy4R converts function parameters to thunk functions.

func Lazy4R2 added in v0.0.2

func Lazy4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1)) func(func() T0, func() T1, func() T2, func() T3) (R0, R1)

Lazy4R2 converts function parameters to thunk functions.

func Lazy4S added in v0.0.2

func Lazy4S[T0, T1, T2, T3 any](fn func(T0, T1, T2, ...T3)) func(func() T0, func() T1, func() T2, func() []T3)

Lazy4S converts function parameters to thunk functions.

func Lazy4SR added in v0.0.2

func Lazy4SR[T0, T1, T2, T3, R any](fn func(T0, T1, T2, ...T3) R) func(func() T0, func() T1, func() T2, func() []T3) R

Lazy4SR converts function parameters to thunk functions.

func Lazy4SR2 added in v0.0.2

func Lazy4SR2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, ...T3) (R0, R1)) func(func() T0, func() T1, func() T2, func() []T3) (R0, R1)

Lazy4SR2 converts function parameters to thunk functions.

func Lazy5 added in v0.0.2

func Lazy5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4)) func(func() T0, func() T1, func() T2, func() T3, func() T4)

Lazy5 converts function parameters to thunk functions.

func Lazy5R added in v0.0.2

func Lazy5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R) func(func() T0, func() T1, func() T2, func() T3, func() T4) R

Lazy5R converts function parameters to thunk functions.

func Lazy5R2 added in v0.0.2

func Lazy5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1)) func(func() T0, func() T1, func() T2, func() T3, func() T4) (R0, R1)

Lazy5R2 converts function parameters to thunk functions.

func Lazy5S added in v0.0.2

func Lazy5S[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, ...T4)) func(func() T0, func() T1, func() T2, func() T3, func() []T4)

Lazy5S converts function parameters to thunk functions.

func Lazy5SR added in v0.0.2

func Lazy5SR[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, ...T4) R) func(func() T0, func() T1, func() T2, func() T3, func() []T4) R

Lazy5SR converts function parameters to thunk functions.

func Lazy5SR2 added in v0.0.2

func Lazy5SR2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, ...T4) (R0, R1)) func(func() T0, func() T1, func() T2, func() T3, func() []T4) (R0, R1)

Lazy5SR2 converts function parameters to thunk functions.

func Not added in v0.0.2

func Not(b bool) bool
Example
package main

import (
	"fmt"
	"slices"

	"github.com/parametalol/curry"
	"github.com/parametalol/curry/seq"
)

func main() {
	fruits := []string{"banana", "banana", "orange", "banana"}

	isBanana := curry.BindFirstOf2R(curry.Eq, "banana")

	notBanana := curry.Wrap(isBanana, curry.Not)

	fmt.Println(slices.Collect(
		seq.Filter(slices.Values(fruits),
			notBanana),
	))
}
Output:

[orange]

func Return added in v0.0.2

func Return[T0 any](arg0 T0) T0

Return just returns the only argument.

Example
package main

import (
	"fmt"

	"github.com/parametalol/curry"
)

func main() {
	// Return binds return value to a function without parameters.
	// It can be used for binding a value to lazy functions.
	f := func(a string, b string) {
		fmt.Println(a, b)
	}
	lazyF := curry.Lazy2(f)
	// Bind "first":
	lazyBound := curry.BindFirstOf2(
		lazyF, curry.Thunk("first"))

	lazyBound(curry.Thunk("second"))
}
Output:

first second

func Return2 added in v0.0.2

func Return2[T0, T1 any](arg0 T0, arg1 T1) (T0, T1)

Return2 just returns the both arguments.

func ReturnS added in v0.0.2

func ReturnS[T0 any](arg0 ...T0) []T0

Pass just returns the only argument.

func Reverse2 added in v0.0.2

func Reverse2[T0, T1 any](fn func(T0, T1)) func(T1, T0)

Reverse2 the order of the parameters of a function returning no values.

func Reverse2R added in v0.0.2

func Reverse2R[T0, T1, R any](fn func(T0, T1) R) func(T1, T0) R

Reverse2R the order of the parameters of a function returning one value.

func Reverse2R2 added in v0.0.2

func Reverse2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1)) func(T1, T0) (R0, R1)

Reverse2R2 the order of the parameters of a function returning two values.

func Reverse3 added in v0.0.2

func Reverse3[T0, T1, T2 any](fn func(T0, T1, T2)) func(T2, T1, T0)

Reverse3 the order of the parameters of a function returning no values.

func Reverse3R added in v0.0.2

func Reverse3R[T0, T1, T2, R any](fn func(T0, T1, T2) R) func(T2, T1, T0) R

Reverse3R the order of the parameters of a function returning one value.

func Reverse3R2 added in v0.0.2

func Reverse3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1)) func(T2, T1, T0) (R0, R1)

Reverse3R2 the order of the parameters of a function returning two values.

func Reverse4 added in v0.0.2

func Reverse4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3)) func(T3, T2, T1, T0)

Reverse4 the order of the parameters of a function returning no values.

func Reverse4R added in v0.0.2

func Reverse4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R) func(T3, T2, T1, T0) R

Reverse4R the order of the parameters of a function returning one value.

func Reverse4R2 added in v0.0.2

func Reverse4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1)) func(T3, T2, T1, T0) (R0, R1)

Reverse4R2 the order of the parameters of a function returning two values.

func Reverse5 added in v0.0.2

func Reverse5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4)) func(T4, T3, T2, T1, T0)

Reverse5 the order of the parameters of a function returning no values.

func Reverse5R added in v0.0.2

func Reverse5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R) func(T4, T3, T2, T1, T0) R

Reverse5R the order of the parameters of a function returning one value.

func Reverse5R2 added in v0.0.2

func Reverse5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1)) func(T4, T3, T2, T1, T0) (R0, R1)

Reverse5R2 the order of the parameters of a function returning two values.

func Thunk added in v0.0.2

func Thunk[T0 any](arg0 T0) func() T0

Thunk takes an argument and constructs a function that returns the argument.

func Thunk2 added in v0.0.2

func Thunk2[T0, T1 any](arg0 T0, arg1 T1) func() (T0, T1)

Thunk2 takes two arguments and constructs a function that returns these arguments.

func ThunkS added in v0.0.2

func ThunkS[T0 any](arg0 ...T0) func() []T0

ThunkS takes a variable number of arguments of any type and returns a function, that returns a slice containing the arguments.

func Un2 added in v0.0.2

func Un2[T0, T1 any](fn func(T0) func(T1)) func(T0, T1)

Un2 transforms a curried function with 2 parameter(s) back into its original form.

func Un2R added in v0.0.2

func Un2R[T0, T1, R any](fn func(T0) func(T1) R) func(T0, T1) R

Un2R transforms a curried function with 2 parameter(s) back into its original form.

Example
package main

import (
	"fmt"

	"github.com/parametalol/curry"
)

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

	uncurriedAdd := curry.Un2R(curriedAdd)
	result := uncurriedAdd(3, 4)
	fmt.Println(result)
}
Output:

7

func Un2R2 added in v0.0.2

func Un2R2[T0, T1, R0, R1 any](fn func(T0) func(T1) (R0, R1)) func(T0, T1) (R0, R1)

Un2R2 transforms a curried function with 2 parameter(s) back into its original form.

func Un2S added in v0.0.2

func Un2S[T0, T1 any](fn func(T0) func(...T1)) func(T0, ...T1)

Un2S transforms a curried function with 2 parameter(s) back into its original form.

func Un2SR added in v0.0.2

func Un2SR[T0, T1, R any](fn func(T0) func(...T1) R) func(T0, ...T1) R

Un2SR transforms a curried function with 2 parameter(s) back into its original form.

func Un2SR2 added in v0.0.2

func Un2SR2[T0, T1, R0, R1 any](fn func(T0) func(...T1) (R0, R1)) func(T0, ...T1) (R0, R1)

Un2SR2 transforms a curried function with 2 parameter(s) back into its original form.

func Un3 added in v0.0.2

func Un3[T0, T1, T2 any](fn func(T0) func(T1) func(T2)) func(T0, T1, T2)

Un3 transforms a curried function with 3 parameter(s) back into its original form.

func Un3R added in v0.0.2

func Un3R[T0, T1, T2, R any](fn func(T0) func(T1) func(T2) R) func(T0, T1, T2) R

Un3R transforms a curried function with 3 parameter(s) back into its original form.

func Un3R2 added in v0.0.2

func Un3R2[T0, T1, T2, R0, R1 any](fn func(T0) func(T1) func(T2) (R0, R1)) func(T0, T1, T2) (R0, R1)

Un3R2 transforms a curried function with 3 parameter(s) back into its original form.

func Un3S added in v0.0.2

func Un3S[T0, T1, T2 any](fn func(T0) func(T1) func(...T2)) func(T0, T1, ...T2)

Un3S transforms a curried function with 3 parameter(s) back into its original form.

func Un3SR added in v0.0.2

func Un3SR[T0, T1, T2, R any](fn func(T0) func(T1) func(...T2) R) func(T0, T1, ...T2) R

Un3SR transforms a curried function with 3 parameter(s) back into its original form.

func Un3SR2 added in v0.0.2

func Un3SR2[T0, T1, T2, R0, R1 any](fn func(T0) func(T1) func(...T2) (R0, R1)) func(T0, T1, ...T2) (R0, R1)

Un3SR2 transforms a curried function with 3 parameter(s) back into its original form.

func Un4 added in v0.0.2

func Un4[T0, T1, T2, T3 any](fn func(T0) func(T1) func(T2) func(T3)) func(T0, T1, T2, T3)

Un4 transforms a curried function with 4 parameter(s) back into its original form.

func Un4R added in v0.0.2

func Un4R[T0, T1, T2, T3, R any](fn func(T0) func(T1) func(T2) func(T3) R) func(T0, T1, T2, T3) R

Un4R transforms a curried function with 4 parameter(s) back into its original form.

func Un4R2 added in v0.0.2

func Un4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0) func(T1) func(T2) func(T3) (R0, R1)) func(T0, T1, T2, T3) (R0, R1)

Un4R2 transforms a curried function with 4 parameter(s) back into its original form.

func Un4S added in v0.0.2

func Un4S[T0, T1, T2, T3 any](fn func(T0) func(T1) func(T2) func(...T3)) func(T0, T1, T2, ...T3)

Un4S transforms a curried function with 4 parameter(s) back into its original form.

func Un4SR added in v0.0.2

func Un4SR[T0, T1, T2, T3, R any](fn func(T0) func(T1) func(T2) func(...T3) R) func(T0, T1, T2, ...T3) R

Un4SR transforms a curried function with 4 parameter(s) back into its original form.

func Un4SR2 added in v0.0.2

func Un4SR2[T0, T1, T2, T3, R0, R1 any](fn func(T0) func(T1) func(T2) func(...T3) (R0, R1)) func(T0, T1, T2, ...T3) (R0, R1)

Un4SR2 transforms a curried function with 4 parameter(s) back into its original form.

func Un5 added in v0.0.2

func Un5[T0, T1, T2, T3, T4 any](fn func(T0) func(T1) func(T2) func(T3) func(T4)) func(T0, T1, T2, T3, T4)

Un5 transforms a curried function with 5 parameter(s) back into its original form.

func Un5R added in v0.0.2

func Un5R[T0, T1, T2, T3, T4, R any](fn func(T0) func(T1) func(T2) func(T3) func(T4) R) func(T0, T1, T2, T3, T4) R

Un5R transforms a curried function with 5 parameter(s) back into its original form.

func Un5R2 added in v0.0.2

func Un5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0) func(T1) func(T2) func(T3) func(T4) (R0, R1)) func(T0, T1, T2, T3, T4) (R0, R1)

Un5R2 transforms a curried function with 5 parameter(s) back into its original form.

func Un5S added in v0.0.2

func Un5S[T0, T1, T2, T3, T4 any](fn func(T0) func(T1) func(T2) func(T3) func(...T4)) func(T0, T1, T2, T3, ...T4)

Un5S transforms a curried function with 5 parameter(s) back into its original form.

func Un5SR added in v0.0.2

func Un5SR[T0, T1, T2, T3, T4, R any](fn func(T0) func(T1) func(T2) func(T3) func(...T4) R) func(T0, T1, T2, T3, ...T4) R

Un5SR transforms a curried function with 5 parameter(s) back into its original form.

func Un5SR2 added in v0.0.2

func Un5SR2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0) func(T1) func(T2) func(T3) func(...T4) (R0, R1)) func(T0, T1, T2, T3, ...T4) (R0, R1)

Un5SR2 transforms a curried function with 5 parameter(s) back into its original form.

func Wrap added in v0.0.2

func Wrap[RV, A, B any](start func(A) B, process ...func(B) RV) func(A) RV

Wrap returns a function that runs start, processes the start result with the provided process functions, and returns the result of the last process.

Example
package main

import (
	"fmt"
	"strings"

	"github.com/parametalol/curry"
)

func main() {
	// isValue(string) int is a function that compares a string to "value".
	isValue := curry.BindLastOf2R(strings.Compare, "value")
	isZero := curry.F2R(curry.Eq[int])(0)

	// Construct a chain of processors that returns true if a given string
	// is equal to "value" ignoring case when trimmed.
	// Return in the end is just for the next lines alignment.
	chain := curry.Wrap(curry.Wrap(curry.Wrap(curry.Return(
		strings.TrimSpace, // string -> string
	), strings.ToLower, // string -> string
	), isValue, // string -> int
	), isZero, // int -> bool
	)

	// This is equal to:
	//	 chain := func(s string) bool {
	//	 	return strings.Compare(
	//	 		strings.ToLower(
	//	 			strings.TrimSpace(s)), "value") == 0
	//	 }

	fmt.Println(chain("test"), chain("  VALUE  "))
}
Output:

false true

Types

type FnSig0R added in v0.0.2

type FnSig0R[R any] struct {
	RV0 R
}

func Signature0R added in v0.0.2

func Signature0R[R any](fn func() R) (s FnSig0R[R])

type FnSig0R2 added in v0.0.2

type FnSig0R2[R0, R1 any] struct {
	RV0 R0
	RV1 R1
}

func Signature0R2 added in v0.0.2

func Signature0R2[R0, R1 any](fn func() (R0, R1)) (s FnSig0R2[R0, R1])

type FnSig1 added in v0.0.2

type FnSig1[T0 any] struct {
	Arg0 T0
}

func Signature1 added in v0.0.2

func Signature1[T0 any](fn func(T0)) (s FnSig1[T0])

type FnSig1R added in v0.0.2

type FnSig1R[T0, R any] struct {
	FnSig1[T0]
	FnSig0R[R]
}

func Signature1R added in v0.0.2

func Signature1R[T0, R any](fn func(T0) R) (s FnSig1R[T0, R])

type FnSig1R2 added in v0.0.2

type FnSig1R2[T0, R0, R1 any] struct {
	FnSig1[T0]
	FnSig0R2[R0, R1]
}

func Signature1R2 added in v0.0.2

func Signature1R2[T0, R0, R1 any](fn func(T0) (R0, R1)) (s FnSig1R2[T0, R0, R1])

type FnSig2 added in v0.0.2

type FnSig2[T0, T1 any] struct {
	FnSig1[T0]
	Arg1 T1
}

func Signature2 added in v0.0.2

func Signature2[T0, T1 any](fn func(T0, T1)) (s FnSig2[T0, T1])

type FnSig2R added in v0.0.2

type FnSig2R[T0, T1, R any] struct {
	FnSig2[T0, T1]
	FnSig0R[R]
}

func Signature2R added in v0.0.2

func Signature2R[T0, T1, R any](fn func(T0, T1) R) (s FnSig2R[T0, T1, R])
Example
package main

import (
	"fmt"
	"slices"

	"github.com/parametalol/curry"
)

func main() {
	i := 0
	odd := func() bool {
		i++
		return i&1 == 0
	}

	// slices.DeleteFunc expects func(int) bool. Let's adapt odd: the int
	// argument will be ignored.
	fmt.Println(
		slices.DeleteFunc([]int{1, 2, 3, 4, 5},
			curry.Adapt1RF(curry.Signature2R(slices.DeleteFunc[[]int, int]).Arg1, odd)))
}
Output:

[1 3 5]

type FnSig2R2 added in v0.0.2

type FnSig2R2[T0, T1, R0, R1 any] struct {
	FnSig2[T0, T1]
	FnSig0R2[R0, R1]
}

func Signature2R2 added in v0.0.2

func Signature2R2[T0, T1, R0, R1 any](fn func(T0, T1) (R0, R1)) (s FnSig2R2[T0, T1, R0, R1])

type FnSig3 added in v0.0.2

type FnSig3[T0, T1, T2 any] struct {
	FnSig2[T0, T1]
	Arg2 T2
}

func Signature3 added in v0.0.2

func Signature3[T0, T1, T2 any](fn func(T0, T1, T2)) (s FnSig3[T0, T1, T2])

type FnSig3R added in v0.0.2

type FnSig3R[T0, T1, T2, R any] struct {
	FnSig3[T0, T1, T2]
	FnSig0R[R]
}

func Signature3R added in v0.0.2

func Signature3R[T0, T1, T2, R any](fn func(T0, T1, T2) R) (s FnSig3R[T0, T1, T2, R])

type FnSig3R2 added in v0.0.2

type FnSig3R2[T0, T1, T2, R0, R1 any] struct {
	FnSig3[T0, T1, T2]
	FnSig0R2[R0, R1]
}

func Signature3R2 added in v0.0.2

func Signature3R2[T0, T1, T2, R0, R1 any](fn func(T0, T1, T2) (R0, R1)) (s FnSig3R2[T0, T1, T2, R0, R1])

type FnSig4 added in v0.0.2

type FnSig4[T0, T1, T2, T3 any] struct {
	FnSig3[T0, T1, T2]
	Arg3 T3
}

func Signature4 added in v0.0.2

func Signature4[T0, T1, T2, T3 any](fn func(T0, T1, T2, T3)) (s FnSig4[T0, T1, T2, T3])

type FnSig4R added in v0.0.2

type FnSig4R[T0, T1, T2, T3, R any] struct {
	FnSig4[T0, T1, T2, T3]
	FnSig0R[R]
}

func Signature4R added in v0.0.2

func Signature4R[T0, T1, T2, T3, R any](fn func(T0, T1, T2, T3) R) (s FnSig4R[T0, T1, T2, T3, R])

type FnSig4R2 added in v0.0.2

type FnSig4R2[T0, T1, T2, T3, R0, R1 any] struct {
	FnSig4[T0, T1, T2, T3]
	FnSig0R2[R0, R1]
}

func Signature4R2 added in v0.0.2

func Signature4R2[T0, T1, T2, T3, R0, R1 any](fn func(T0, T1, T2, T3) (R0, R1)) (s FnSig4R2[T0, T1, T2, T3, R0, R1])

type FnSig5 added in v0.0.2

type FnSig5[T0, T1, T2, T3, T4 any] struct {
	FnSig4[T0, T1, T2, T3]
	Arg4 T4
}

func Signature5 added in v0.0.2

func Signature5[T0, T1, T2, T3, T4 any](fn func(T0, T1, T2, T3, T4)) (s FnSig5[T0, T1, T2, T3, T4])

type FnSig5R added in v0.0.2

type FnSig5R[T0, T1, T2, T3, T4, R any] struct {
	FnSig5[T0, T1, T2, T3, T4]
	FnSig0R[R]
}

func Signature5R added in v0.0.2

func Signature5R[T0, T1, T2, T3, T4, R any](fn func(T0, T1, T2, T3, T4) R) (s FnSig5R[T0, T1, T2, T3, T4, R])

type FnSig5R2 added in v0.0.2

type FnSig5R2[T0, T1, T2, T3, T4, R0, R1 any] struct {
	FnSig5[T0, T1, T2, T3, T4]
	FnSig0R2[R0, R1]
}

func Signature5R2 added in v0.0.2

func Signature5R2[T0, T1, T2, T3, T4, R0, R1 any](fn func(T0, T1, T2, T3, T4) (R0, R1)) (s FnSig5R2[T0, T1, T2, T3, T4, R0, R1])

type Func added in v0.0.3

type Func interface {
	~func()
}

type Func1 added in v0.0.3

type Func1[T0 any] interface {
	~func(T0) | Func
}

type Func1AnyR added in v0.0.3

type Func1AnyR[T0, R any] interface {
	Func1R[T0, R] | Func1R[T0, any]
}

type Func1R added in v0.0.3

type Func1R[T0, R any] interface {
	~func(T0) R | ~func(T0) |
		FuncR[R]
}

type Func2 added in v0.0.3

type Func2[T0, T1 any] interface {
	~func(T0, T1) | Func1[T0] | Func1[T1]
}

type Func2AnyR added in v0.0.3

type Func2AnyR[T0, T1, R any] interface {
	Func2R[T0, T1, R] | Func2R[T0, T1, any]
}

type Func2R added in v0.0.3

type Func2R[T0, T1, R any] interface {
	~func(T0, T1) R | Func2[T0, T1] |
		Func1R[T0, R] | Func1R[T1, R]
}

type FuncAny1 added in v0.0.3

type FuncAny1[T0 any] interface {
	Func1[T0] | Func1[any]
}

type FuncAny1AnyR added in v0.0.3

type FuncAny1AnyR[T0, R any] interface {
	Func1AnyR[T0, R] | Func1AnyR[any, R]
}

type FuncAny2 added in v0.0.3

type FuncAny2[T0, T1 any] interface {
	Func2[T0, T1] | Func2[any, T1] | Func2[T0, any] | Func2[any, any]
}

type FuncAny2AnyR added in v0.0.3

type FuncAny2AnyR[T0, T1, R any] interface {
	Func2AnyR[T0, T1, R] | Func2AnyR[any, T1, R] | Func2AnyR[T0, any, R] | Func2AnyR[any, any, R] |
		FuncAny2[T0, T1]
}

type FuncAnyR added in v0.0.3

type FuncAnyR[R any] interface {
	FuncR[R] | FuncR[any]
}

type FuncR added in v0.0.3

type FuncR[R any] interface {
	~func() R | Func
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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