www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Monad and its little sisters

I implemented the Maybe monad using template specialization. 
Feedback welcome!

https://bitbucket.org/qznc/d-monad/src/ba39f2551af0e2e90a40653af92c048fed519a18/generic.d?at=master

However, a few questions or possibly shortcomings of D came up.

1. I could not specify the inheritance between the templates. A 
Monad is an Applicative, which is a Functor. Is there some 
template magic to check "There is a template like this 
'Functor!Maybe'"?

2. A template cannot restrict template specializations. 
Specifically, the Functor(T) template should restrict 
Functor(T:Maybe), such that it must declare functions or 
templates of a specific signature.

3. Shouldn't a function be a delegate? I assume this question 
came up before, but there seems to be interest to make it easier. 
My code specifies function parameters three times. It should be a 
delegate and the caller should use std.functional.toDelegate to 
convert it. Why not an implicit cast? Performance seems to be the 
only problem.
May 16 2013