TL;DR

内容

関数型プログラミングでは、小さな関数から新しい関数を作るのと同じように、小さな型から新しい型を作る。この合成の考え方に基づく型システムを代数的な型システムと呼ぶ。F# では 2 つの方法で型を合成できる。

AND 型

AND 型は、複数の型をすべて組み合わせた型で、直積型とも呼ばれる。F# ではレコード型で表す。

type FruitSalad = {
    Apple: AppleVariety
    Banana: BananaVariety
    Cherries: CherryVariety
}

OR 型

OR 型は、複数の型のうちどれか 1 つを取る型で、直和型や選択型とも呼ばれる。F# では判別共用体で表す。

type FruitSnack =
    | Apple of AppleVariety
    | Banana of BananaVariety
    | Cherries of CherryVariety

選択肢が 1 つしかない選択型も定義できる。これを単純型と呼び、プリミティブな値を内部に持つラッパー型を定義するのに使う。値オブジェクトを表すときに役立つ。

type ProductCode =
    | ProductCode of string
 
// 1 行でも書ける
type ProductCode = ProductCode of string

キーワード