Implement automatic currying.
[hope.git] / src / hope_fun.erl
index 61babe9..5ee6730 100644 (file)
@@ -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.
This page took 0.019666 seconds and 4 git commands to generate.