LoginSignup
5
0

More than 3 years have passed since last update.

【Control.Monad.Trans】(1) Identityモナド

Last updated at Posted at 2020-01-03

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モナドの定義

Data.Functor.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

今回は以上です。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0