Bug 5804 – map! needs to fail on void functions + I'd like a mapCall function
Status
RESOLVED
Resolution
DUPLICATE
Severity
enhancement
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
Other
OS
Windows
Creation time
2011-03-31T18:57:00Z
Last change time
2015-06-09T05:14:47Z
Assigned to
nobody
Creator
andrej.mitrovich
Comments
Comment #0 by andrej.mitrovich — 2011-03-31T18:57:51Z
import std.stdio;
import std.algorithm;
void mapCall(alias func, T)(T t)
{
foreach (value; t)
{
func(value);
}
}
void main()
{
// nothing happens
map!(writeln)([4, 5, 6]);
// prints 4\n, 5\n, 6\n
mapCall!(writeln)(4, 5, 6);
}
map doesn't work properly with void functions, it should at least check the return type of a function and fail to instantiate if the return type is void. Otherwise it seems like this is a no-op since nothing really happens.
The feature request is to either expand map! to work on void functions, or introduce a new function which allows us to call a single function in sequence with various arguments. The `mapCall` implementation here is just a demonstration, as is its name.
I think this type of function could be a useful to have, unless something like this already exists in Phobos (well, map was supposed to be it but it doesn't work for void functions..).
Comment #1 by dlang-bugzilla — 2011-04-01T01:23:15Z
Looks like a duplicate of issue 5753.
Comment #2 by pedro — 2011-04-24T06:02:19Z
Void functions imply side effects. According to the documentation map! does lazy evaluation. In my experience, mixing up lazy evaluation with side effects should be avoided at all costs. That's why I think that map! should be used with pure functions only and reject promptly void functions.
Comment #3 by bearophile_hugs — 2011-04-24T06:52:30Z
I suggest to merge this with bug 5753 , or the other way around.
Now pure functions are allowed to have a debug{} that contains impure code (for debug prints only, please), this decreases a little the need for impure functions.
In bug 5756 I have asked for eager amap()/afilter(), that's more fit for an impure mapping function.
Comment #4 by pedro — 2011-04-24T12:26:24Z
(In reply to comment #3)
> I suggest to merge this with bug 5753 , or the other way around.
I agree. I proposed a fix in issue 5753.
Comment #5 by andrej.mitrovich — 2011-04-24T12:31:29Z
*** This issue has been marked as a duplicate of issue 5753 ***