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