Haskell/Monad transformers
A Gentle Introduction to Monad Transformers
モナドトランスフォーマー・ステップ・バイ・ステップ
【Control.Monad.Trans】(1) Identityモナド - Qiita
【Control.Monad.Trans】(2) StateTモナド - Qiita
【Control.Monad.Trans】(3) ExceptTモナド - Qiita
【Control.Monad.Trans】(4) ReaderTモナド - Qiita
【Control.Monad.Trans】(5) IOモナド - Qiita
Monad transformersを中心に、モナドの基本的な事項をまとめてみました。(1)~(5)までの連載で、Monad transformersを試行していきます。実際にはそれぞれの回でIdentity, StateT, ExceptT, ReaderT, IO モナドを積み重ねていく例題を示しています。
Monad transformersについては、以下のサイトが表向きは最新といわれるものでしょうが、中身はControl.Monad.Transの方をimportしたりしているので、説明の都合上、Control.Monad.Transを使います。
mtl - Hackage - Haskell
最初はIdentityモナドです。Identityモナドはモナドトランスフォーマーにおいてbaseモナドの役割を負うことが多いものです。ですから他のモナドを紹介する前に、最初に定義だけ紹介しておきます。
1. Identityモナドの定義
Identity型は以下のように定義されます。
newtype Identity a = Identity { runIdentity :: a }
Identityモナドは以下のようなシンプルなものです。
instance Monad Identity where
return = Identity
m >>= k = k (runIdentity m)
1-1 Identityモナドのfailについて
Control.Monad -- Identityにはfailの明示的な定義が無いから、デフォルトの定義を継承します。
class Applicative m => Monad m where
---
fail :: String -> m a
fail s = errorWithoutStackTrace s
今回は以上です。