https://github.com/nhpip/curry-elixir
Currying and partial application in Elixir
https://github.com/nhpip/curry-elixir
curry currying elixir partial-application
Last synced: 11 months ago
JSON representation
Currying and partial application in Elixir
- Host: GitHub
- URL: https://github.com/nhpip/curry-elixir
- Owner: nhpip
- License: mit
- Created: 2021-06-07T23:47:33.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-06-24T20:29:44.000Z (over 3 years ago)
- Last Synced: 2025-02-25T07:06:58.679Z (12 months ago)
- Topics: curry, currying, elixir, partial-application
- Language: Elixir
- Homepage:
- Size: 19.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Curry
A simple module to do currying and partial application using Variadic functions to start partial evaluation (i.e. no lists needed).
See: https://github.com/nhpip/variadic-elixir
## Example:
**Currying:**
```
iex(9)> curry_fun = curry(&Curry.test3/3)
#Function<0.51120925/1 in Curry.curry/1>
iex(10)> next_fun = curry_fun.(1)
#Function<1.51120925/1 in Curry.do_generate_next/3>
iex(11)> next_fun = next_fun.(77)
#Function<1.51120925/1 in Curry.do_generate_next/3>
iex(12)> next_fun_or_result = next_fun.(10)
{88, {1, 77, 10}}
iex(13> info(curry_fun)
[
function: &Curry.test3/3,
type: "Currying",
function_arity: 3,
args_still_needed: 3,
args_collected: 0
]
```
**Partial application:**
```
iex(20)> partial_fun = partial(&Curry.test5/5, 1, 2)
#Function<19.126501267/3 in :erl_eval.expr/5>
iex(21)> info(partial_fun)
[
function: &Curry.test5/5,
type: "Partial application",
function_arity: 5,
args_still_needed: 3,
args_collected: 2
]
iex(22)> partial_fun.(3, 4, 5)
{15, {1, 2, 3, 4, 5}}
```