Probable C# 6.0 features
Robert Clipsham
robert at octarineparrot.com
Wed Dec 11 05:40:17 PST 2013
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();
}
----
More information about the Digitalmars-d
mailing list