Packages

Function currying in Elixir.

Current section

Files

Jump to
kare lib kare.ex
Raw

lib/kare.ex

defmodule Kare do
@moduledoc """
Enables function currying in Elixir.
iex> curried = Kare.curry(fn x, y, z -> x + y * z end)
iex> curried.(1).(2).(3)
7
"""
def curry(fun) do
{_, arity} = :erlang.fun_info(fun, :arity)
_curry(fun, arity, [])
end
defp _curry(fun, 0, arguments) do
apply(fun, Enum.reverse arguments)
end
defp _curry(fun, arity, arguments) do
fn arg -> _curry(fun, arity - 1, [arg | arguments]) end
end
end