在Real World Haskell的第15章中,定义了一个类型类:
class (Monad m) => MonadSupply s m | m -> s where
后几段,它表示由于上下文而不需要定义>> =和return。但是没有进一步解释上下文意味着什么。
如果只有'm'是Monad的实例,编译器如何知道MonadSupply是Monad的实例?
答案 0 :(得分:6)
“上下文”只是class
和=>
之间的部分,在这种情况下是约束Monad m
。而且它并非“知道”,更多的是它强制执行 - 为类型MonadSupply
编写m
的实例,而Monad
也没有{ {1}}实例将产生编译器错误。