Yeah, after my first couple of significant Haskell projects I came to the conclusion that having (>>=) instead of (=<<) as the "canonical bind" is a wart. (>>=) makes for clean desugaring of do notation, but obscures that (a -> m b) -> (m a -> m b) intuition, which I think is more important pedagogically and also tends to be cleaner in non-do monadic code.
To a beginner, flip is an easy mechanical concept, but analyzing the resultant type for new insights is not a habit yet. The one whose purpose is purely mechanical should be "the flipped one."
This function is actually in the Prelude as (=<<).
On Mon, 14 Dec 2015, 13:17 Dániel Arató <exitconsole@gmail.com> wrote:On 14/12/2015, Raja <rajasharan@gmail.com> wrote:
> So extending this interpretation - can I swap the two parameters (?)
>
> Now my new hypothetical interpretation becomes:
>
> (>>=) :: (a -> m b) -> m a -> m b
Sure,
bind' :: Monad m => (a -> m b) -> m a -> m b
bind' = flip (>>=)
> If i further add parens:
>
> (>>=) :: (a -> m b) -> (m a -> m b)
Yeah, that's exactly the same thing. Types are right associative.
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners