
10 May
2010
10 May
'10
5:51 a.m.
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