(>>= f) is equivalent to (flip (>>=) f), not to ((>>=) f). You can try this 
with your own function this way:

(&$^) :: (Monad m) => m a -> (a -> m b) -> m b
(&$^) = undefined

:t (&$^ f)

Milind Patil wrote:
For a function

f ::  a -> m b
f = undefined

I am having trouble understanding how the type of (>>= f)
is

(>>= f) :: m a -> m b

where, by definition, type of (>>=) is
(>>=) :: (Monad m) => m a -> (a -> m b) -> m b

I do not see how (>>= f) even unifies.

I mean if I code a function with the same type as (>>=) ie.
tt :: (Monad m) => m a -> (a -> m b) -> m b
tt = undefined

type of (tt f) does not infer to the same type as (>>= f), from ghc ...

(tt f) :: (Monad ((->) b)) => (m a -> b -> b1) -> b -> b1

There seems to something special about (>>=) apart from its type. And whats
(Monad ((->) b))? I am new to Haskell and I may have gaps in my understanding of
type inference in Haskell.
regards,
Milind Patil





_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to