Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@sand

【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
0
Help us understand the problem. What is going on with this article?