2010-07-17 13 views
7

Nel capitolo 15 della Real World Haskell, una classe tipo è definito:cosa è contesto in Haskell classe tipo multiparametrica

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

Un paio di paragrafi dopo, si dice che >> = e tornare non hanno bisogno di essere definito a causa del contesto. Ma non c'è altra spiegazione di cosa significhi per contesto.

Come fa il compilatore a sapere che MonadSupply è un'istanza di Monad se solo 'm' è un'istanza di Monad?

risposta

6

Il "contesto" è solo la parte tra class e =>, che in questo caso è il vincolo Monad m. E non è tanto che "sa", più che è applica - scrivendo un'istanza di MonadSupply per un tipo m che non ha anche un'istanza Monad produrrà un errore del compilatore.

+0

Ah, sì. Mi mancava la parte in cui diceva che essere una monade era un pre-requisito. Grazie per la risposta rapida :) – user394827

Problemi correlati