こんにちは、開発部のjiweenです。
本記事では、Haskellについて誤解しやすい・つまづきやすいポイントである、Haskellにおける手続き型プログラミングについて紹介します。手続き型言語を書いたことはあるがHaskellを書いたことがない人を対象にしています。
- 記事の目的
- 用語
- 手続き型プログラミング
- 作用と副作用
- 純粋 (pure) /不純 (impure) な関数
- モナドを使ったコード例
- モナドとして書くメリット
- IOモナド
- do構文
- effect system を使ったコード例
- まとめ
- 補足 (おまけ)
- モナドについて
- なぜ flatMap と呼ぶのか
- effect system におけるeffectの解釈
- 採用情報
記事の目的
Haskellは純粋関数型言語です。関数型スタイル自体は近年関数型でない言語でも取り入れられており、ある程度イメージできる方も多いと思います。しかし、Haskellの特殊なところは"純粋"関数型であるところです。純粋関数型では基本的に副作用が起こせない (関数の入力と出力しか使えない) ため、通常の手続き型言語とは全く異なる方法で手続きを記述します。誤解されがちですが、Haskellでは手続き型プログラミングを完全に排除するわけではありません。必要に応じて、モナドという概念を使って手続き型プログラミングを行います。
Haskellのこの特殊性は他の言語から乗り換える際の障壁です。逆に、手続きの扱い方でつまづかなければ、Haskellを (他の言語と同程度に) 実用するのは比較的難しくありません。本記事ではその障壁を取り除くことを目指します。
更に、その手続きの扱い方は通常の手続き型言語と異なるメリットがあることについても説明します。
続きを読む