Probable C# 6.0 features
qznc
qznc at web.de
Wed Dec 11 06:13:10 PST 2013
On Wednesday, 11 December 2013 at 13:40:22 UTC, Robert Clipsham
wrote:
> On Tuesday, 10 December 2013 at 20:35:08 UTC, Namespace wrote:
>> I love Monadic null checking. Would be great if D would have
>> it.
>
> Doesn't need to be a language feature - you can implement it as
> a library type. Here's a quick hacked together maybe monad:
>
> ----
> import std.stdio;
>
> struct Maybe(T)
> {
> private T val = null;
>
> this(T t)
> {
> val = t;
> }
>
> auto opDispatch(string method, U...)(U params)
> {
> alias typeof(mixin("val." ~ method ~ "(params)"))
> retType;
> if (val) {
> mixin("return Maybe!(" ~ retType.stringof ~
> ")(val." ~ method ~ "(params));");
> }
> return nothing!retType();
> }
> }
>
> Maybe!T just(T)(T t)
> {
> return Maybe!T(t);
> }
>
> Maybe!T nothing(T)()
> {
> return Maybe!T();
> }
>
> class Foo
> {
> Bar retNull()
> {
> writeln("foo null");
> return null;
> }
>
> Bar notNull()
> {
> writeln("foo not null");
> return new Bar();
> }
> }
>
> class Bar
> {
> Foo retNull()
> {
> writeln("bar null");
> return null;
> }
>
> Foo notNull()
> {
> writeln("bar not null");
> return new Foo();
> }
> }
>
> void main()
> {
> auto maybe = just(new Foo);
> maybe.notNull().notNull().notNull().retNull().notNull();
> }
>
> ----
Now define map,bind,join. It quickly gets ugly.
https://bitbucket.org/qznc/d-monad/src/5b9d41c611093db74485b017a72473447f8d5595/generic.d?at=master
More information about the Digitalmars-d
mailing list