Monads compared to InputRanges?

Shammah Chancellor anonymous at coward.com
Wed Dec 4 04:08:32 PST 2013


On 2013-12-04 08:24:02 +0000, qznc said:

> 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.
> 
> Not Haskell, not D, not Rust can check, if your monad actually follows 
> the monad laws [3]. This would probably require a full theorem prover 
> in your language. So Coq, Isabelle, and maybe ATS could do that. A 
> similar challenge would be to check if a user-defined plus operator is 
> commutative (a+b == b+a) like arithmetic plus operations.
> 
> [0] 
> https://bitbucket.org/qznc/d-monad/src/5b9d41c611093db74485b017a72473447f8d5595/generic.d?at=master 
> 
> [1] 
> https://github.com/D-Programming-Language/phobos/blob/master/std/range.d#L519 
> 
> [2] http://static.rust-lang.org/doc/0.8/tutorial.html#generics
> [3] http://www.haskell.org/haskellwiki/Monad_laws

I was talking on the D newsgroup about using an interface type and 
implementing isConceptOf!(<interface>) to be used with structs.    
Wouldn't that fix the problem?

-Shammah



More information about the Digitalmars-d-learn mailing list