Bug 8142 – std.functional.curry isn't flexible enough

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-05-24T14:40:11Z
Last change time
2024-12-01T16:15:08Z
Assigned to
No Owner
Creator
bearophile_hugs
Moved to GitHub: phobos#9926 →

Comments

Comment #0 by bearophile_hugs — 2012-05-24T14:40:11Z
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.
Comment #1 by robert.schadek — 2024-12-01T16:15:08Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9926 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB