1
我有一個基本的類型類:Typeclass使用`=>`運算符時的混淆?
class MyClass a where
(-+) :: a -> a -> a
instance MyClass Int where
e1 -+ e2 = e1 + e2 * 100
myFunction :: MyClass a => a -> a -> a
myFunction e1 e2 = e1 -+ e2
我明白上面是如何工作的。
不過,我不明白,在這個類型類的聲明中使用的=>
運營商:
class Monad m => MonadReader r m | m -> r where
是與單子類本作MonadReader類?爲什麼使用這個?
這就是說'MonadReader r m'成立時'Monad m'必須始終保持。 'Monad m'是'MonadReader r m'的超類(儘管我不確定_superclass_這個單詞是否真的可以縮放到像MonadReader這樣的多參數類型類)。 – Alec
在函數定義和類定義中,當m是Monad時,'Monad m =>'可以讀爲*「。在後一種情況下,它確實建立了Monad和MonadReader之間的關係。也就是說,每個MonadReader實例都必須是Monad實例。 IOW它使'Monad'的MonadReader r' a *子類*(如果你可以將這個概念應用於多參數類型類)。 –