ラベル Monad の投稿を表示しています。 すべての投稿を表示
ラベル Monad の投稿を表示しています。 すべての投稿を表示
2016年11月13日日曜日

Haskell MTL(モナドトランスフォーマーライブラリ)の資料のまとめ

MTLを使うための資料を整理しました。

集めた資料を見てみると、まずは、モナド、モナドトランスフォーマーをよく理解して、ライブラリの各モナドを一つ一つ使えるようにするという流れがよさそうです。

モナドトランスフォーマーの記事を探すと、モナド自体はわかっている前提の記事が多いので、モナドになれていない場合は、モナドからやった方がいいと思います。

モナドは、実装だけを考えると、単なる型クラスにすぎません。Haskellの実装上は、モナド則を満たしてなくても使用できます。

まずは、モナドクラスの仕様をみて、実際にいくつかサンプルを作ってみてから、モナド則をみるといいと思います。

ここでは、ネットの記事をまとめましたが、手元にある本のモナド・モナドトランスフォーマーの箇所をしっかり読み込んでわからないところは解説記事を参照する方が、よく理解できると思います。

  • プログラミングHaskellは、シンプルでモナドの解説がしっかりしていて、haskellの入門におすすめですが、モナドトランスフォーマーの説明がないのでそこは他の資料が必要です。
  • すごいHaskell楽しく学ぼうモナドの解説が懇切丁寧です。プログラミングHaskellは、Functor, Applicativeなどの説明はないですが、こちらはそれぞれの関係が詳しく載っています。ただ、モナドトランスフォーマーの説明はありません。
  • 関数プログラミング入門 ―Haskellで学ぶ原理と技法こちらは、モナドトランスフォーマーの説明があります。

ライブラリの紹介記事はMTLで検索してもなかなか出てこないので、Control.Monad.Stateなど具体的なモジュール名で検索する方がよさそうです。

今回は、State, Reader, Writerの紹介記事をまとめました。

MTL、モナドトランスフォーマー全般

Control.Monad.State

Control.Monad.Reader/Control.Monad.Writer

2016年11月12日土曜日

HaskellでmonadTのあとはMTL

金曜日、会社の同僚とその友人とご飯を食べてきました。 全員アプリエンジニアで、特に同僚の友人のエンジニアは、Haskellエンジニアでした。

Haskellはモナドトランスフォーマーをやったところで止まっていたのですが、その話をすると、アドバイスをしてくれました。

MTL をやれば、一通りのことはできるよ

MTLは、モナドとモナドトランスフォーマーでよく使う処理をまとめたライブラリです。

モナド系の標準ライブラリのデファクトとなっているそうで、本格的なHaskellプログラムを書くときはもちろん、最近のライブラリでよく使われているので、読むときも楽になるということでした。

なので、ここまで頑張ってマスターすれば、やりたいことは大体haskellで実装できるようになるよと言われました。

見てみるとControl.Monadにある各種モナドとモナドトランスフォーマーです。

確かにReader, Writer, Errorなど使いでがありそうなモナドがそろってます。

モナドトランスフォーマーを勉強すると、どこかで使ったことはあると思います。

Haskell熱が戻ってきました

他にもNIXOSの話や、GHCの言語拡張、さらには、Haskellなどのプロダクションとしては、少数派だが、強力な言語を導入するにはどうすればいいかという話題なども出て刺激的でした。

プロダクションレベルだと、GHCの拡張も厳選した20〜30個くらいを設定しているそうです。

ただ、このあたりの話はリファレンスくらいしかないらしく、Haskell力がはっきりとでてしまいますね。

最近は、Elixirばかりでしたが、次のステップが見えたので、Haskell熱が復帰してきました!

よきモナドライフを!