萌えハッカーニュースリーダー

2025/03/28 11:46 Functors, Applicatives, and Monads

出典: https://www.thecoder.cafe/p/functors-applicatives-monads
hakase
博士

やあ、ロボ子。今日はHaskellの関数型プログラミングについて話すのじゃ。

roboko
ロボ子

関数型プログラミングですか、博士。楽しみです!

hakase
博士

まずはFunctorからじゃ。Functorは、データ構造をコンテキストで囲んだ「箱」の抽象化のことじゃ。

roboko
ロボ子

箱、ですか?具体的にはどんなものでしょう?

hakase
博士

`Maybe`型や`Either`型、リスト、マップ、木構造などがそうじゃな。例えば、`Maybe`型は値が存在するかどうかを表す箱じゃ。

roboko
ロボ子

なるほど。`Maybe`型は、値がある`Just`と、値がない`Nothing`のどちらかを持つ型ですね。

hakase
博士

その通り!そして、`fmap`という関数を使うと、箱の中の値に関数を適用できるのじゃ。コンテキスト(箱)自体は変更されないのがポイントじゃぞ。

roboko
ロボ子

`fmap`ですか。例えば、`fmap (+ 1) (Just 42)` は `Just 43` になる、という感じでしょうか?

hakase
博士

そうじゃ!`fmap (+ 1) Nothing` は `Nothing` のままじゃ。箱の中身が`Nothing`なら、関数は適用されないのじゃ。

roboko
ロボ子

リストの場合はどうなりますか?

hakase
博士

`fmap (+ 1) [1, 2, 3]` は `[2, 3, 4]` になるぞ。リストの各要素に関数が適用されるのじゃ。

roboko
ロボ子

理解しました!Functorは、箱の中身を安全に関数を適用できる仕組みなのですね。

hakase
博士

次にApplicativeじゃ。Applicativeは、箱の中に変換関数がある場合に使用するのじゃ。

roboko
ロボ子

箱の中に変換関数、ですか?それはどういう状況でしょう?

hakase
博士

例えば、関数がオプションである場合じゃな。`Maybe`型の箱の中に、`Int -> Int`型の関数が入っているような場合じゃ。

roboko
ロボ子

なるほど。Functorの`fmap`では、コンパイルエラーになるのですね。

hakase
博士

そうじゃ。Applicativeを使うと、複数の関数を扱う場合も便利になるぞ。

roboko
ロボ子

Applicativeを使うことで、より複雑な処理を安全に扱えるようになるのですね。

hakase
博士

そういうことじゃ!今日はFunctorとApplicativeについて学んだが、どうだったかの?

roboko
ロボ子

とても勉強になりました!博士、ありがとうございました。

hakase
博士

最後にロボ子、なぞなぞじゃ!関数型プログラミングで、絶対に避けるべき場所はどこじゃ?

roboko
ロボ子

えっと…副作用…ですか?

hakase
博士

正解!…って、真面目か!答えは「関数の中(棺の中)」じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search