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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

正解!…って、真面目か!答えは「関数の中(棺の中)」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。