【发布时间】:2010-07-17 19:49:19
【问题描述】:
在 Real World Haskell 的第 15 章中,定义了一个类型类:
class (Monad m) => MonadSupply s m | m -> s where
几段之后,它说 >>= 和 return 不需要定义,因为上下文。但是没有进一步解释上下文的含义。
如果只有 'm' 是 Monad 的实例,编译器如何知道 MonadSupply 是 Monad 的实例?
【问题讨论】:
在 Real World Haskell 的第 15 章中,定义了一个类型类:
class (Monad m) => MonadSupply s m | m -> s where
几段之后,它说 >>= 和 return 不需要定义,因为上下文。但是没有进一步解释上下文的含义。
如果只有 'm' 是 Monad 的实例,编译器如何知道 MonadSupply 是 Monad 的实例?
【问题讨论】:
“上下文”只是class 和=> 之间的部分,在这种情况下是约束Monad m。与其说它“知道”,不如说它强制它——为没有Monad 实例的m 类型编写一个MonadSupply 实例将产生编译错误。
【讨论】: