如何在D中实现Haskell*Maybe*构造?

Arl*_*len 4 haskell d construct

我想Maybe从D中的Haskell 实现,只是为了它的地狱.这是我到目前为止所得到的,但并不是那么好.任何想法如何改进它?

class Maybe(a = int){ }  //problem 1: works only with ints

class Just(alias a) : Maybe!(typeof(a)){ }

class Nothing : Maybe!(){ }


Maybe!int doSomething(in int k){

  if(k < 10)
    return new Just!3;  //problem 2: can't say 'Just!k'
  else
    return new Nothing;
}
Run Code Online (Sandbox Code Playgroud)

Haskell也许定义:

data  Maybe a = Nothing | Just a
Run Code Online (Sandbox Code Playgroud)

rat*_*eak 5

如果你使用这个怎么办?

class Maybe(T){ }  

class Just(T) : Maybe!(T){ 
T t;
this(T t){
this.t = t;
}
}
class Nothing : Maybe!(){ }


Maybe!int doSomething(in int k){

  if(k < 10)
    return new Just!int(3); 
  else
    return new Nothing;
}
Run Code Online (Sandbox Code Playgroud)

我个人虽然使用了标记的联合和结构(并且enforce它在获取值时是正确的)