В главе 15 из Real World Haskell определен класс типов:
class (Monad m) => MonadSupply s m | m -> s where
Через пару абзацев говорится, что >> = и return не нужно определять из-за контекста. Но нет дальнейшего объяснения того, что это означает под контекстом.
Как компилятор знает, что MonadSupply является экземпляром Monad, если только 'm' является экземпляром Monad?