4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Functional Programming Strategies In Scala with Cats を和訳している

Last updated at Posted at 2025-05-25

Functional Programming Strategies in Scala with Cats 日本語版

最近(多分2024年2月頃から)、Scala with Cats を読もうとすると『Functional Programming Strategies』という書籍ページが表示されます。これは Scala with Cats の著者(のひとり)である Noel さんがかれこれ3年ほど前から書き進めているものです。Scala with Cats の第二版のような位置付けでもあるかもしれませんが、大幅に加筆されてほぼ別の本になっています。2025年5月現在まだ執筆中で、執筆と並行して和訳を行っています。

関数型プログラミング戦略(Functional Programming Strategies)というのは、日本語で戦略というとやや違和感がないでもないですが、関数型プログラミングにおいて繰り返し現れる抽象的なパターンのことで、オブジェクト指向でいうところのデザインパターンみたいなものです。

Scala with Cats も、モナドやファンクターといった概念をそういうパターンとみなして紹介していたわけですが、Cats で型クラスとして実現されているものだけにフォーカスしていました。この新しい書籍は、たとえば代数的データ型や Tagless Final みたいなものもパターンのひとつとして、幅広いトピックを紹介しています。

こういったトピックをひとつひとつ丁寧に掘り下げている本は、自分は他に知りません。関数型プログラミングに興味があるなら、是非読んでみるとよいと思います。

現時点での目次を、以下にざっと並べておきます。


  1. 関数型プログラミング戦略
    1.1. コードを考えるための三つのレベル
    1.2. 関数型プログラミング
  2. 代数的データ型
    2.1. 代数的データ型の構築
    2.2. Scala における代数的データ型
    2.3. 構造的再帰
    2.4. 構造的余再帰
    2.5. 代数的データ型における代数
    2.6. まとめ
  3. 余データとしてのオブジェクト
    3.1. データと余データ
    3.2. Scala における余データ
    3.3. 余データの構造的再帰と余再帰
    3.4. データと余データの関係
    3.5. データと余データの拡張性
    3.6. 演習: さまざまな集合
    3.7. まとめ
  4. コンテキスト抽象化
    4.1. コンテキスト抽象化のメカニズム
    4.2. 型クラスの仕組み
    4.3. 型クラスの合成
    4.4. 型クラスとは何か
    4.5. 演習: 表示ライブラリ
    4.6. 型クラスと変位
    4.7. まとめ
  5. インタープリタ
    5.1. 正規表現
    5.2. インタープリタとレイフィケーション
    5.3. 末尾再帰インタープリタ
    5.4. まとめ
  6. Cats を使う
    6.1. クイックスタート
    6.2. Cats を使う
    6.3. 例題: Eq
  7. モノイドと半群
    7.1. モノイドの定義
    7.2. 半群の定義
    7.3. Cats におけるモノイド
    7.4. モノイドの応用
    7.5. まとめ
  8. ファンクター
    8.1. ファンクターの例
    8.2. さまざまなファンクター
    8.3. ファンクターの定義
    8.4. 補足: 高カインド型と型コンストラクタ
    8.5. Cats におけるファンクター
    8.6. 反変ファンクターと非変ファンクター
    8.7. Cats の Contravariant と Invariant
    8.8. 補足: 部分的ユニフィケーション
    8.9. まとめ
  9. モナド
    9.1. モナドとは何か
    9.2. Cats におけるモナド
    9.3. Identity モナド
    9.4. Either
    9.5. 補足: エラーハンドリングと MonadError
    9.6. Eval モナド
    9.7. Writer モナド
    9.8. Reader モナド
    9.9. State モナド
    9.10. 独自のモナドを定義する
    9.11. まとめ
  10. モナド変換子
    10.1. 演習: モナドの合成
    10.2. 変換の例
    10.3. Cats におけるモナド変換子
    10.4. 演習: モナド戦士、トランスフォーム、出動!
    10.5. まとめ
  11. Semigroupal と Applicative
    11.1. Semigroupal
    11.2. apply 構文
    11.3. さまざまな型に対する Semigroupal
    11.4. Parallel
    11.5. Apply と Applicative
    11.6. まとめ
  12. Foldable と Traverse
    12.1. Foldable
    12.2. Traverse
    12.3. まとめ
  13. インデックス付き型
    13.1. ファントム型
    13.2. インデックス付き余データ
    13.3. インデックス付きデータ
    13.4. まとめ
  14. Tagless Final インタープリタ
    14.1. 余データ的インタープリタ
    14.2. Tagless Final インタープリタ
    14.3. 代数的ユーザインターフェース
    14.4. よりよいエンコーディング
    14.5. まとめ
  15. インタープリタとコンパイラの最適化
    15.1. 代数的操作
    15.2. 継続からスタックへ
    15.3. コンパイラと仮想マシン
    15.4. インタープリタからスタックマシンへ
    15.5. まとめ
  16. Creating Usable Code
  17. ケーススタディ: 非同期処理のテスト
    17.1. 型コンストラクタの抽象化
    17.2. モナドの抽象化
    17.3. まとめ
  18. ケーススタディ: MapReduce
    18.1. 並列化された map と fold
    18.2. foldMap の実装
    18.3. foldMap の並列化
    18.4. まとめ
  19. Case Study: Data Validation
    19.1. Sketching the Library Structure
    19.2. The Check Datatype
    19.3. Basic Combinators
    19.4. Transforming Data
    19.5. Kleislis
    19.6. Summary
  20. Case Study: CRDTs
    20.1. Eventual Consistency
    20.2. The GCounter
    20.3. Generalisation
    20.4. Abstracting GCounter to a Type Class
    20.5. Abstracting a Key Value Store
    20.6. Summary
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?