-ifndef(CURRY_HRL). -define(CURRY_HRL, true). -include("../Foreign.hrl"). %% Curry a function curry(Fun) -> curry(Fun, arity(Fun)). curry(Fun, 0) -> Fun; %% ignore curry(Fun, 1) -> Fun; %% ignore curry(Fun, N) -> curry(Fun, [], N). curry(Fun, Args, 0) -> erlang:apply(Fun, lists:reverse(Args)); curry(Fun, Args, N) -> fun(X) -> curry(Fun, [X|Args], N-1) end. arity(Fun) when is_function(Fun) -> element(2, erlang:fun_info(Fun, arity)); arity(_) -> 0. -endif.