みどりねこ日記

よくわからないけど、頑張りますよ。

Haskellモナドトランスフォーマー(5)

モナドトランスフォーマーがいかにして動いているのかは、どのように>>=演算子が実装されているかを理解するとわかるでしょう。>>=演算子の実装は、トランスフォーマーではない、もとのモナドのそれと非常に似ていることがわかると思います。

トランスフォーマーの型コンストラクタについて説明します。型コンストラクタはHaskellモナドの基幹となるものです。Reader r aが、環境rのついたReaderモナドの中にある型aの値の型であることを思い出してください。型コンストラクタReader rはMonadクラスのインスタンスで、runReader :: Reader r a -> r -> aはReaderモナドの演算を行い、型aである結果を返します。

Readerモナドトランスフォーマー版は、ReaderTと呼ばれ、モナド型コンストラクタを新たなパラメータとして付加します。ReaderT r m aは、”元のモナドがReaderで、内側のモナドがmであるような合成モナド”の値の型です。

Reader T r mはモナドクラスのインスタンスで、関数runReaderT :: ReaderT r m a -> r -> m aは合成モナドを実行し、型m aである結果を返します。