2016-01-25 34 views
45

Potete provare che se return a = return b poi a=b? Quando uso =, intendo nel senso delle leggi e delle prove, non nel senso della classe Eq.Se return a = return b allora a = b?

Ogni monade che conosco sembra soddisfare questo, e non posso pensare a una monade valida che non sarebbe (Const a è un funtore e applicativa, ma non una monade.)

risposta

64

No. Si consideri il monade banale:

data Trivial a = Cow 

instance Monad Trivial where 
    _ >>= _ = Cow 
    return _ = Cow 
+18

... meglio noto come 'Const()'. – leftaroundabout

+52

Perché dovrei passare l'opportunità di scrivere 'Cow' in un programma Haskell? –

+5

Perché davvero ... punto preso. – leftaroundabout