Option!T

Sebastian Graf via Digitalmars-d digitalmars-d at puremagic.com
Tue Jul 1 07:58:46 PDT 2014


On Tuesday, 1 July 2014 at 14:28:10 UTC, Meta wrote:
> On Tuesday, 1 July 2014 at 11:37:15 UTC, Shammah Chancellor 
> wrote:
>> On 2013-12-10 17:28:26 +0000, Andrei Alexandrescu said:
>>
>>> I talked to a programmer who knows Scala (among others) and 
>>> he mentioned the usefulness of the Option type - a zero or 
>>> one element collection (range in D terminology). Here's an 
>>> article discussing it: 
>>> http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html
>>> 
>>> 
>>> We have only(x) 
>>> (http://dlang.org/phobos/std_range.html#.only) to be a 
>>> collection of exactly one value, but not a type for "a value 
>>> of type T or nothing at all". Should we follow Scala's 
>>> example and add it?
>>> 
>>> 
>>> Andrei
>>
>> Did anything ever come of this?  If there's nothing in Phobos 
>> yet, I can start working on it and submit a PR.   If we can 
>> get this formalized and into the good usage, it seems like we 
>> would not need a .? operator.
>>
>> -Shammah
>
> I have a simple implementation that I've been working on off 
> and on. It's kind of neat representing it as a range as you get 
> all the range algorithms for free. One problem I ran into is 
> that my first instinct is to use std.algorithm.map as the 
> monadic bind operation, but it produces an option wrapped in a 
> MapResult, which is no good. You could just implement map as a 
> member function of Option!T, but it's not transparent, and it's 
> more difficult to make it lazy.

std.algorithm.map corresponds to the arrow map (fmap) of the 
functor underlying the monad, it's not the bind operator. That's 
why you'll get the nesting, what you really want is flatMap, a 
map followed by a flatten operation (Phobos neither seems to 
include flatMap, nor an equivalent of flatten, just chain). The 
bind operator would correspond to flatMap.


More information about the Digitalmars-d mailing list