2010-07-17 74 views
7

在真实世界哈斯克尔第15章,一个类型的类定义:什么是上下文Haskell的多参数类型的类

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

一对夫妇的段落后,它说,>> =,并返回不需要由于上下文而被定义。但没有进一步解释上下文意味着什么。

编译器如何知道MonadSupply是Monad的实例,如果只有“m”是单子的实例?

回答

6

“上下文”只是class=>之间的一部分,在这种情况下,它是约束条件Monad m。而且这与其说是它“知道”,更在于它强制它 - 写MonadSupply实例的类型m不也有Monad实例将产生一个编译器错误。

+0

嗯,是的。我错过了那个说monad是一个先决条件的部分。感谢您的快速回答:) – user394827 2010-07-18 01:30:34