8

Real World Haskell の第 15 章では、型クラスが定義されています。

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

数段落後、コンテキストのために >>= と return を定義する必要はないと書かれています。しかし、それが文脈によって何を意味するかについてのこれ以上の説明はありません。

'm' だけが Monad のインスタンスである場合、コンパイラは MonadSupply が Monad のインスタンスであることをどのように認識しますか?

4

1 に答える 1

6

「コンテキスト」はとの間の一部でclassあり=>、この場合は制約Monad mです。そして、それが「知っている」ほどではなく、それを強制します。インスタンスを持たないMonadSupply型のインスタンスを作成すると、コンパイラエラーが発生します。mMonad

于 2010-07-17T20:03:37.520 に答える