Monad laws in terms of fishes (>=>)
Present monad laws with Kleisli composition (fish operator)
return >=> g
= g
g >=> return
= g
(f >=> g) >=> h
= f >=> (g >=> h)
instead of bind:
return a >>= k
= k a
m >>= return
= m
m >>= (\x -> k x >>= h)
= (m >>= k) >>= h
Even though >>= is a method of Monad this is so much clearer that I think it's worth it, started as ticket:12672#comment:125771
Fun mention: QuickSpec doesn't generate lambda terms so it will not discover (xs >>= f) >>= g = xs >>= (\x -> f x >>= g) so it needs to be in terms of >=>.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Documentation |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |