モナド、アプリケーション、矢印など、機能的なイディオムはたくさんあります。それらはさまざまな記事に記載されていますが、残念ながら、それらが1か所にまとめられている本や記事はありません(Typeclassopediaがありますが、たくさんあります十分にカバーされていない領域の)。誰かが1か所で十分にカバーし、FPの中間スキルを持つプログラマーがアクセスできる記事/本を推薦できますか?
モナド、アプリケーション、矢印など、機能的なイディオムはたくさんあります。それらはさまざまな記事に記載されていますが、残念ながら、それらが1か所にまとめられている本や記事はありません(Typeclassopediaがありますが、たくさんあります十分にカバーされていない領域の)。誰かが1か所で十分にカバーし、FPの中間スキルを持つプログラマーがアクセスできる記事/本を推薦できますか?
回答:
私の提案は、Scalaを学びたい場合は、Paul ChiusanoとRunar Bjarnasonの本を読むことです。
パートII:機能設計およびコンビネーターライブラリ
パートIII:機能設計パターン
パートIV:ルールを破る:効果とI / O
申し訳ありませんが、これらの構成要素のさまざまな使用法について詳しく説明している記事や本はありませんが、個々のリソースへのリンクをいくつか紹介します。
非常に一般的なパターンは、単純なモナドの代わりにモナド変換子を構築することです(次の段落のリンクも参照)。それは基本的に、他のモナドと組み合わせる必要がある何かを構築することを意味し、その結果、両方のモナドを処理できるより複雑なモナドになります。
では実世界Haskellのモナドについていくつかの章があります。では第14章モナドの著者は、基本といくつかの一般的な使用法(多分、リスト、状態)を説明します。第15章モナドを使ったプログラミングでは、それらを効果的に使用する方法についてさらに説明します(リーダーモナドもカバーしています)。次の章ではParsecの使用方法を説明しますが、実際にどのように機能するかをカバーする記事を検索する方が興味深いかもしれません。これは、解析のためのモナドのよく組織化された使用の本当に良い例になるはずです。Fianlly、第18章。モナド変換子モナドトランスフォーマーがどのように機能するかを紹介し、1つずつ構築する方法を段階的に示します。この章の最後のセクションに対する考慮事項も興味深いものです。
私は、モナドの独創的な使用法について、SOに関する非常に興味深い質問を一度読みました。提案されたリンクは、トピックについての素晴らしい読み物でした。その精神で、私は矢に同じことを尋ねようとしました:私は確かにモナドのそれよりも少ない答えを得ましたが、それにもかかわらず興味深いものはありました。
4人のギャングによるOOPパターンに関しては、IBMによる、機能的思考シリーズのトピックに関する3つの記事の素晴らしいセットがあります。ターゲットの関数型言語はScalaです。OOPでの通常の設計パターンを説明し、それらがScalaにどのようにマッピングされるかを示します。
あなたの質問に最も関連する記事は確かに最初のものですが、それでも他の2つは興味深い関連する読み物かもしれません。
ジェレミー・ギボンズには、FPブログにパターンがあり、最終的には、あなたが求めている本にかなり近いものになる予定です。もちろん、それはあなたが今望むほど有用な状態にはまだなっていませんが、彼はいくつかの励ましに値します!
その間、Brent YorgeyのTypeclassopediaの場合は+1とします。それは本当に便利で、後で混乱する部分がある場合、このサイトはそれらの底に到達するための良い場所です。ブレントがレビューを続けていることは知っています。彼が読者に届いていない場合は、彼に助けを求めてください。
多くのFPに関するものがOlegのサイトで公開されています:http : //okmij.org/ftp/
Josh SuerethのFPパターンに関するプレゼンテーション:http ://jsuereth.com/intro-to-fp/
Learn You a Haskell for Great Goodの後の章を読みましたか?
第6章では、関数型言語で最も重要な「設計パターン」の2つであるマップとフォールドについて説明します。
第11章から第13章では、ファンクタ、アプリケーションファンクタ、モナドの順に説明しています。これは役に立ちます。多くのチュートリアルではFunctorsを紹介し、次にMonadsを紹介して、最後にApplicative Functorsを追加します(まったくカバーしている場合)。Functors => Applicative Functors => Monadsから移動すると、次第に一般性とパワーのはしごが上に移動するため、LYAHの順序はより適切です。
第14章では、ジッパーについて説明します。これらを効果的に特定のデータへのポインターを含むコンテナークラスと考えることができます。つまり、ポインターの場所でO(1)アクセスと更新を取得できます。
Haskellのより高度なトピックであるArrowsまたはComonadsについては説明しません。ArrowsやComonadsの使い方と理由を理解するには、モナドをしっかりと把握している必要があるので、これは問題ではないと思います。