You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
std.functional.curry doesn't work if the first argument (the curried one) is a function. This is a common enough use case:
import std.functional;
auto foo(T)(T function(T x) f, T x) {
return f(x);
}
int bar(int x) { return x * 2; }
alias curry!(foo, &bar) fooBar;
void main() {}
DMD 2.060alpha gives:
temp.d(6): Error: expression & bar is not a valid template value argument
temp.d(6): Error: template instance std.functional.curry!(foo,& bar) error instantiating
I think D functional-style programming needs a more flexible/uniform currying.
Workaround:
import std.traits: ParameterTypeTuple;
auto foo(alias F)(ParameterTypeTuple!F[0] x) {
return F(x);
}
int bar(int x) { return x * 2; }
alias foo!bar fooBar;
void main() {
assert(fooBar(5) == 10);
}
But this is not as flexible. A language that supports functional programming needs to handle functions as first class citizens.
The text was updated successfully, but these errors were encountered:
bearophile_hugs reported this on 2012-05-24T14:40:11Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=8142
Description
std.functional.curry doesn't work if the first argument (the curried one) is a function. This is a common enough use case: import std.functional; auto foo(T)(T function(T x) f, T x) { return f(x); } int bar(int x) { return x * 2; } alias curry!(foo, &bar) fooBar; void main() {} DMD 2.060alpha gives: temp.d(6): Error: expression & bar is not a valid template value argument temp.d(6): Error: template instance std.functional.curry!(foo,& bar) error instantiating I think D functional-style programming needs a more flexible/uniform currying. Workaround: import std.traits: ParameterTypeTuple; auto foo(alias F)(ParameterTypeTuple!F[0] x) { return F(x); } int bar(int x) { return x * 2; } alias foo!bar fooBar; void main() { assert(fooBar(5) == 10); } But this is not as flexible. A language that supports functional programming needs to handle functions as first class citizens.The text was updated successfully, but these errors were encountered: