Help us understand the problem. What is going on with this article?

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

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

今回は以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away