Monads compared to InputRanges?

Max Klyga max.klyga at gmail.com
Wed Dec 4 06:12:25 PST 2013


On Wednesday, 4 December 2013 at 08:24:03 UTC, qznc wrote:
> On Wednesday, 4 December 2013 at 01:53:39 UTC, Shammah 
> Chancellor wrote:
>> Or is D syntax not generic enough to define monads?
>
> I started to port monads to D [0]. You can do it, but it looks 
> ugly. The trick is to implement (Haskell) type classes via 
> template specialization. I came to the conclusion that it is 
> not worth it.
>
> What D kind of lacks is a way to define a general type class 
> aka the interface. Of course, you could use the "interface" 
> keyword, but then you cannot apply it to structs. Haskell has 
> no structs (value type records), so they do not have this 
> problem. Look at how isInputRange is implemented [1]. The 
> traits in Rust [2] provide this interface mechanisms as a 
> language feature. D uses static-if instead.

D uses static if and template constraints for typeclass/concept 
checking because one cannot add specializations to templates 
defined in other modules. Using template specialization for 
defining type class instances would render them not extensible 
for users


More information about the Digitalmars-d-learn mailing list