Skip to content

Grokking Functional Programming

「Grokking Functional Programming」(Michal Plachta 著)の学習用リポジトリです。 Scala、Java、F#、C#、Haskell、Clojure、Elixir、Rust、Python、TypeScript、Ruby の11言語で関数型プログラミングの実装例と日本語解説を提供します。

11言語統合比較

全 11 言語を横断的に比較する統合記事シリーズです。各章ごとに言語間の共通点と相違点を分析しています。

Part タイトル 統合記事
I 01 関数型プログラミング入門 11言語比較
I 02 純粋関数と副作用 11言語比較
II 03 イミュータブルなデータ操作 11言語比較
II 04 高階関数 11言語比較
II 05 flatMap とモナド的合成 11言語比較
III 06 Option 型 11言語比較
III 07 Either 型と ADT 11言語比較
IV 08 IO モナドと副作用の分離 11言語比較
IV 09 ストリーム処理 11言語比較
V 10 並行・並列処理 11言語比較
VI 11 実践アプリケーション 11言語比較
VI 12 テスト戦略 11言語比較

言語別解説

Scala 版

Scala 3 と cats-effect/fs2 を使った関数型プログラミングの実装例です。

Java 版

Java 21 と Vavr を使った関数型プログラミングの実装例です。

F# 版

F# 8 と .NET を使った関数型プログラミングの実装例です。

C# 版

C# 12 と LanguageExt を使った関数型プログラミングの実装例です。

Haskell 版

Haskell(GHC 9.x)を使った純粋関数型プログラミングの実装例です。

Clojure 版

Clojure 1.11 と core.async を使った関数型プログラミングの実装例です。

Elixir 版

Elixir 1.15 と OTP を使った関数型プログラミングの実装例です。

Rust 版

Rust と tokio を使った関数型プログラミングの実装例です。

Python 版

Python 3.11+ と returns ライブラリを使った関数型プログラミングの実装例です。

TypeScript 版

TypeScript 5.x と fp-ts を使った関数型プログラミングの実装例です。

Ruby 版

Ruby 3.x と dry-rb を使った関数型プログラミングの実装例です。

章構成

Part 内容 Scala Java F# C# Haskell Clojure Elixir Rust Python TypeScript Ruby
I 関数型プログラミングの基礎 part-1 part-1 part-1 part-1 part-1 part-1 part-1 part-1 part-1 part-1 part-1
II 関数型スタイルのプログラミング part-2 part-2 part-2 part-2 part-2 part-2 part-2 part-2 part-2 part-2 part-2
III エラーハンドリング part-3 part-3 part-3 part-3 part-3 part-3 part-3 part-3 part-3 part-3 part-3
IV IO と副作用の管理 part-4 part-4 part-4 part-4 part-4 part-4 part-4 part-4 part-4 part-4 part-4
V 並行処理 part-5 part-5 part-5 part-5 part-5 part-5 part-5 part-5 part-5 part-5 part-5
VI 実践的なアプリケーション part-6 part-6 part-6 part-6 part-6 part-6 part-6 part-6 part-6 part-6 part-6

主要トピック

Part 主要トピック Scala Java F# C# Haskell Clojure Elixir Rust Python TypeScript Ruby
I 純粋関数、参照透過性 関数型基礎 関数型インターフェース let バインディング 式形式メソッド 純粋関数、遅延評価 defn, let def, fn fn, 所有権 def, 型ヒント pipe, 関数合成 def, ブロック
II イミュータブル、高階関数、flatMap List, Option Vavr List, Option List, パイプライン Seq, LINQ リスト内包表記, fold map/filter/reduce Enum, パイプ Iterator, クロージャ map/filter, ジェネレータ ReadonlyArray, chain Enumerable, flat_map
III Option、Either、ADT sealed trait sealed interface 判別共用体 Option, Either Maybe, Either, ADT nil, some->/some->> {:ok}/{:error} Option, Result Maybe, Result (returns) Option, Either, fold nil安全, Result型
IV IO モナド、Stream cats-effect, fs2 独自 IO, Vavr Stream Async, Seq Task, IAsyncEnumerable IO モナド, conduit lazy-seq Agent, Stream async/await, Stream IO, ジェネレータ Task, TaskEither, IO IO, Enumerator
V Ref、Fiber、並列処理 cats-effect Ref/Fiber 独自 Ref, Virtual Thread Ref, MailboxProcessor Ref, Task並列 STM, TVar, async atom/ref, core.async Task, GenServer Arc, Mutex, tokio asyncio, FutureResult sequenceT, traverseArray Ref, Thread
VI Resource、テスト ScalaCheck JUnit 5 プロパティテスト use, FsCheck Resource, Validator bracket, QuickCheck with-open, test.check ExUnit, StreamData トレイト, proptest Protocol, Hypothesis Reader, fast-check Resource, RSpec

参照