TL;DR

すべての複合型が、より小さな型を AND または OR で合成してできている型システム。F# などの関数型プログラミング言語は、代数的な型システムを内蔵している。

なぜ必要か

代数的な型システムはドメインモデリングのための優れたツールである。Domain Modeling Made Functional 第2章では、AND と OR を使ってドメインを文章にしており、それをそのまま型に落とし込める。

仕組み

Domain Modeling Made Functional の著者 Scott Wlaschin によると、代数的な型には 2 種類ある。タプルやレコード型のような「直積型」と、F# の選択型(判別共用体)のような「直和型」である。AND で合成するのが直積型、OR で合成するのが直和型にあたる。

直積型が取りうる値の数は、構成する型の値の数の積になる。たとえば 4 つの方向と 2 つの速さを組にした Velocity は 4 × 2 = 8 通りになる。直和型が取りうる値の数は和になる。4 つの方向と NotMoving のどれか 1 つを選ぶ Movement は 4 + 1 = 5 通りになる。

関連

出典