Что такое контекст в классе многопараметрического типа Haskell - PullRequest
7 голосов
/ 17 июля 2010

В главе 15 из Real World Haskell определен класс типов:

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

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

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

1 Ответ

6 голосов
/ 18 июля 2010

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

...