X-Git-Url: https://git.xandkar.net/?p=hope.git;a=blobdiff_plain;f=src%2Fhope_fun.erl;h=5ee6730499fa840d7a88ab427d4a82126d070673;hp=61babe9c808e549d4af64906a730a2d4078c417c;hb=e033aadea66cc7f68e3a66cde23a2edfe4c4e9e6;hpb=99fd18ae3aa61238700208a5f2b2959c1b1a2d80 diff --git a/src/hope_fun.erl b/src/hope_fun.erl index 61babe9..5ee6730 100644 --- a/src/hope_fun.erl +++ b/src/hope_fun.erl @@ -2,9 +2,23 @@ -export( [ id/1 + , curry/1 ]). -spec id(A) -> A. id(X) -> X. + +-spec curry(fun()) -> + fun(). +curry(F) -> + {value, {arity, Arity}} = lists:keysearch(arity, 1, erlang:fun_info(F)), + curry(F, [], Arity). + +-spec curry(fun(), list(), integer()) -> + fun(). +curry(F, Args, 0) -> + apply(F, lists:reverse(Args)); +curry(F, Args, Arity) -> + fun (X) -> curry(F, [X | Args], Arity - 1) end.