Haskell多参数类型类中的上下文是什么

use*_*827 8 monads haskell typeclass

在Real World Haskell的第15章中,定义了一个类型类:

class (Monad m) => MonadSupply s m | m -> s where
Run Code Online (Sandbox Code Playgroud)

稍后几段,它说因为上下文而不需要定义>> =和return.但是没有进一步解释上下文意味着什么.

如果只有'm'是Monad的实例,编译器如何知道MonadSupply是Monad的实例?

C. *_*ann 6

在"上下文"只是之间的部分class=>,在这种情况下是约束Monad m.而且它并不是"知道",更多的是它强制执行它 - MonadSupplym不具有Monad实例的类型编写实例将产生编译器错误.