问题 class Applicative f => Monad f where return :: a -> f a (>>=) :: f a -> (a -> f b) -> f b (<*>) can be derived from pure and (>>=) : fs <*> as = fs >>= (\f -> as >>= (\a -> pure (f a))) For the line fs >>= (\f -> as >>= (\a -> pure (f a))) I am confused by the usage of >>= . I think it takes a functor f a and a function, then return another functor f b . But in this expression, I feel lost. 回答1: Lets start with the type we're implementing: (<*>) :: Monad f => f (a -> b) -> f a -> f b (The