digitalmars.D.bugs - [Issue 8142] New: std.functional.curry isn't flexible enough
- d-bugmail puremagic.com (42/42) May 24 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8142
http://d.puremagic.com/issues/show_bug.cgi?id=8142 Summary: std.functional.curry isn't flexible enough Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc 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. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 24 2012