Утилита join
функция определяется как:
join :: (Monad m) => m (m a) -> m a
join x = x >>= id
Учитывая, что тип >>=
равен Monad m => ma -> (a -> mb) -> mb
и id
— это a -> a
, как эта функция может также иметь тип a -> mb
, как это должно быть в приведенном выше определении? Что такое m
и b
в этом случае?