2016年9月23日金曜日

わかりやすかったモナド/モナドトランスファーの入門記事

Haskellを学ぶ上で一つの山場と言えるのがモナドではないでしょうか。 モナドを学んだ時に実際にわかりやすかった記事をまとめました。

モナドについて

「すごいHaskell楽しく学ぼう」が説明が丁寧で、イメージも掴みやすくおすすめです。

こちらのsiquare氏の記事は、ポイントを押さえていて実用的です。 Haskellで競技プログラミング IO編

Functor -> Applicative -> Monad

この流れを理解するには、すごいHaskell本の説明がわかりやすいです。

山本氏のこちらの記事は、QA式なので一緒に読むと理解がしやすいと思います。

QAで学ぶMonad

xxxM系の関数を学ぶ

  • mapMなど、Mが付いているものは、Monadを返します。
  • monad内部で、リストを扱うことができ、do記法でmap処理ができます。
  • コードイメージ

    do
      list <- runGetFromWeb
      idList <- mapM (x -> runDB . insert $ x) list 
      return idList

    本での紹介は少ないですが、実際にはかなり使いますし、これらの関数を使うことでモナドに慣れてきます。

Monad を組み合わせる MonadT(モナドトランスファー)

概念的には、難しいものではないです。(contextのようなイメージ) ただ、しっかりと理解して使わないとはまります。

以下では、MonadTの学習に役立つ記事をあげます。

関数プログラミング入門

  • 第10章モナド(特に10.4 モナドの複合 10ページ弱)
  • 説明が正確で丁寧なので、まず目を通してみるといいと思います。
  • また、他のチュートリアルなどをやって、慣れてきたけどいまいち理解がという時にもう一度読むと理解が深まります。

Monad Transformers Step By Step

モナドトランスフォーマー・ステップ・バイ・ステップ(Monad Transformers Step By Step)

Martin Grabmüller氏著作、id:bicycle1885氏翻訳の秀逸なチュートリアルです。

  • シンプルな例から始まり、複雑なものに発展していくので、とにかくわかりやすい
  • コードがそのまま全て動く
  • インタラクティブに試すのが前提になっていて確認しやすい

と、最初は実際の動作イメージがつかみにくいMonadTの使い方がよくわかります。 また、組み合わせて使う方法もよくわかるようになります。

Interfacing with RESTful JSON APIs

Interfacing with RESTful JSON APIs

FPCompleteに掲載されいるBJ Terry氏の記事です。

RESTful JSON APIをラップするライブラリを作るという内容です。

かなり実践的な内容で、最終的に、Yesodフレームワークにそのまま組み込めるMonadTを作ります。 その過程で、それらのフレームワークでどのようにMonadTが動作しているかを理解していきます。

  • APIインターフェースの設計
  • 後半が、MonadT化になっています
  • MonadTがフレームワークの中でどう機能するかわかるようになる
  • MonadTを作れるようになる

いかがだったでしょうか?入門記事は他にもたくさんあるので、合うものがあると思います。では、よいHaskellライフを!

0 件のコメント:

コメントを投稿