Что такое контекст в классе типа мультипараметра Haskell

В главе 15 Реального мира Haskell определяется класс типа:

class (Monad m) => MonadSupply s m | m -> s where

Пара абзацев позже, это говорит, что>> = и возврат не должны быть определены из-за контекста. Но нет никакого дальнейшего объяснения того, что это подразумевает под контекстом.

Как компилятор знает, что MonadSupply является экземпляром Монады, если только 'm' является экземпляром Монады?

8
задан Don Stewart 20 April 2011 в 22:49
поделиться

1 ответ

Контекст" - это просто часть между class и =>, которая в данном случае является ограничением Monad m. И оно не столько "знает", сколько принуждает к этому - написание экземпляра MonadSupply для типа m, у которого также нет экземпляра Monad, приведет к ошибке компилятора.

6
ответ дан 5 December 2019 в 22:16
поделиться