Какая системная магия типа Haskell позволяет определять соединение?

Утилита 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в этом случае?

6
задан David Joyner 20 April 2012 в 20:58
поделиться