モナド、アプリカティブ、アローなど、多くの関数型イディオムがあります。それらは別の記事で文書化されていますが、残念ながら、それらが 1 か所にまとめられている本や記事を知りません ( Typeclassopediaはありますが、多くの記事があります)。十分にカバーされていない領域の)。それらを 1 か所で十分にカバーし、FP の中級スキルを持つプログラマーがアクセスできる記事/本を誰か推薦できますか?
5 に答える
私の提案は、Scalaを学びたいのであれば、PaulChiusanoとRunarBjarnasonの本を読むことです。
パートII:機能設計とコンビネータライブラリ
- 小さな言語を作る
- JSONシリアル化
- 仕様ベースのテスト
- パーサー
- 純粋に機能的な並列処理
- 純粋関数型状態
パートIII:機能的なデザインパターン
- 抽象化の場合
- モノイド
- ファンクター
- モナド
- 適用可能なファンクター
- トラバース可能で折りたたみ可能なデータ構造
- コモナッド
パートIV:ルールを破る:効果とI / O
- 効果と副作用
- ストリーム処理とインクリメンタルI/O
- 型システムによる効果範囲の適用
申し訳ありませんが、これらすべての構成要素のさまざまな使用法を詳しく説明している記事や本は知りませんが、個々のリソースへのリンクをいくつか提供できます。
非常に一般的なパターンは、単純なモナドの代わりにモナド変換子を構築することです (次の段落のリンクも参照してください)。これは基本的に、他のモナドと組み合わせる必要があるものを構築することを意味し、その結果、両方の機能を処理できるより複雑なものになります。
Real World Haskellには、モナドに関するいくつかの章があります。Chapter 14. Monadsでは、著者は基本といくつかの一般的な使用法 (おそらく、リスト、状態) について説明します。Chapter 15. Programming with monadsでは、モナドを効果的に使用する方法について詳しく説明しています (reader モナドについても説明しています)。次の章ではParsecの使用方法を説明しますが、実際にどのように機能するかをカバーする記事を検索することはより興味深いかもしれません: 構文解析のためのモナドのよく整理された使用の本当に良い例になるはずです。最後に、第 18 章モナド変換子モナド変換子がどのように機能するかを紹介し、それを構築する方法を順を追って示します。章の最後のセクションに向けた考察も興味深いものです。
モナドの創造的な使用について、SO に関する非常に興味深い質問を読んだことがあります。提案されたリンクは、トピックに関する素晴らしい読み物でした。その精神で、私は矢印についても同じことを尋ねようとしました: モナドのものよりも確かに少ない答えしか得られませんでしたが、それでも興味深いものでした.
ギャング オブ 4 による OOP パターンに関しては、IBM による一連の「機能的思考」のトピックに関する素晴らしい 3 つの記事のセットがあります。対象の関数型言語は Scala です。OOP の通常の設計パターンを説明し、Scala にマップする方法を示します。
- 関数型思考: 関数型設計パターン、パート 1 . ここでは、ファクトリ、テンプレート メソッド、戦略、フライウェイトについて説明します。肝心なのは、関数をファーストクラスの値として持つことで、すべてがはるかに単純になるということです。
- 関数型思考: 関数型設計パターン、パート 2 . これは Java とgroovyに関するものです。アダプター パターンに対応します。
- 関数型思考: 関数型設計パターン、パート 3 . ここでは、インタプリタ パターンについて説明します。繰り返しますが、ターゲット言語はグルーヴィーです。
あなたの質問に関して最も関連性の高い記事は確かに最初の記事ですが、他の 2 つの記事は興味深い関連記事である可能性があります。
Jeremy Gibbons はPatterns in FP ブログを持っており、最終的にはあなたが求めているほとんどの本になる運命にあります。もちろん、それはまだあなたが望んでいるほど有用な状態ではありませんが、彼はいくらかの励ましに値します!
一方、Brent Yorgey の Typeclassopedia については +1 と言っておきましょう。これは非常に便利で、後で混乱する部分がある場合は、このサイトがその原因を突き止めるのに適した場所です。私は、ブレントがそれを審査中であることを知っています。彼が読者に届いていない場合は、助けてあげてください。
多くのFPのものがOlegのサイトで公開されています:http: //okmij.org/ftp/
Josh SuerethによるFPパターンに関するプレゼンテーション:http: //jsuereth.com/intro-to-fp/