2010-07-17 71 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