3
(=<<) :: (a -> m b) -> m a -> m b
id :: a -> a
join :: m (m a) -> m a

所以不应该,

(=<<) id

给出一个错误,因为,

id :: a -> a

并不是,

id :: a -> m a

不 (=<<) 期望,

(something -> m anything)

作为它的第一个论点?

4

1 回答 1

6

m a' -> m a'也是一种a -> a,所以我们可以有

      id ::  m a' -> m a'                        -- a = m a'
   (=<<) :: (m a' -> m a') -> m (m a') -> m a'   -- a = m a', b = a'

(=<<) id ::                   m (m a') -> m a'
于 2012-08-18T09:56:03.373 回答