[Haskell-cafe] Type of (>>= f) where f :: a -> m b

Miguel Mitrofanov miguelimo38 at yandex.ru
Mon May 10 06:06:49 EDT 2010


(>>= 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
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 


More information about the Haskell-Cafe mailing list