関数プログラミング実践入門 【読書記録 5章】

  • モナドについて
  • /=はノットイコール
  • Haskellの型クラスは,今回Bool型やInt型やMaybe a型を型クラスBoolLikeのインスタンスにしたように,既存の型や誰かが定義した型に対してインターフェースを後付けすることも,複雑な記述を要せずに可能となっている.
  • 各計算の間で「失敗時はこうで,成功時はこう」といった場合分けが必要であるということ,これが「どこかで失敗する可能性のある」文脈を持つということ.
  • 同じ文脈を伴う計算同士を組み合わせるときには,一定の冗長性が現れる.そしてその冗長性を隠蔽しつつ,なおかつそれをどのような文脈に対して同様の記法で可能にすることがモナドを利用するモチベーションの1つ.
  • 「同じ環境を参照する」ことは,各計算で「どれも同じように引数をもつ」という計算の文脈となる.
  • 規則を型に落とす.その規則をプログラミング的には実装する,規則にしたがってプログラムを実行することを計算といっている,

「やらなければならないこと」としてのHaskellのMonad

  • (>>=)bindと呼ばれる演算子でアクション同士の組み合わせ方.
  • モナド型クラスのインスタンスであるにもかかわらず,モナド則を満たさないモナドのような何者かを定義して使ってしますと,特にdo記法で使った場合に,予期しない結果を生じることがあるため危険
  • モナドは文脈もまたそれ以外の要素とは直交する部品として切り出し,多相的に扱うことのできる対象としてくれる.
  • 「どこかで引き回す」を文脈にしたものが,Readerモナドと呼ばれる.
  • Haskellにおいて言語の純粋性を守ったまま,副作用を使うために用意されているものがIOモナド.IOモナドが持つ文脈は「副作用を伴う」

モナド,使うメリットや目的はなんとなく掴めるけども概念やその考え方のほうはまだまだ分からないことが多い...