On Saturday, 13 September 2014 at 19:39:03 UTC, Andrei
Alexandrescu wrote:
On 9/13/14, 8:36 AM, bearophile wrote:
This is a little Haskell program that uses the Maybe type
constructor:
[snip]
As others noted, I think we need a kind of range with either
zero or one element. Also, the range would have an "exception"
property that returns null if the operation was successful (and
the element is there) or whatever exception produced the
result. E.g.:
MaybeRange fun() { ... }
...
auto r = fun;
if (r.empty)
{
assert(r.exception);
... error case ...
}
else
{
... use r.front ...
r.popFront;
assert(r.empty); // just one element
}
Andrei
The problem with that is this: making a hypothetical Option type
a range encourages people to use it with the existing range
algorithms. However, the second you use a map or filter on it,
that exception property is no longer accessible.
auto r2 = r.map!(val => val + 1);
writeln(r2.exception); //Error
So there is a need in Phobos for a flatMap (bind) function, and a
flatten function. One problem with this is that it's going to get
very annoying to add a .flatten after every chain of range
operations on the Option type.