パターンマッチはパターンに対して値をマッチさせることです。 値がパターンにマッチする場合、 パターンマッチ中の変数と値の中の要素を結びつける束縛群が生成されます。 パターンマッチは次の一連のルールに従って実行されます:
定数のパターンにマッチする値は同じく定数でなければなりません。このマッチは束縛を作りません。
void 値 () はパターン () にのみマッチします。このマッチは束縛を作りません。
全ての値はワイルドカードパターンにマッチします。このマッチは束縛を作りません。
全ての値は変数パターンにマッチします。このマッチは変数と値の束縛を作ります。
タプル値とタプルパターンは、それらが同じ長さで、前者のそれぞれの値要素が後者の対応するパターン要素にマッチする場合にマッチします。 そしてこのマッチは、マッチしたタプル中の値要素からタプルパターン中のパターン要素に対しての束縛集合を作ります。
レコード値とレコードパターンは、それらが同じフィールド名を持ち、前者のそれぞれの値要素が後者の対応するパターン要素にマッチする場合にマッチします。 そしてこのマッチは、マッチしたレコード中の値要素からレコードパターン中のパターン要素に対しての束縛集合を作ります。
コンストラクタ C をいくつかのパターン引数に適用したパターンが与えられた時、 パターン引数にマッチする値引数に C を適用した値があれば、その値がこのパターンにマッチします。 そしてこのマッチは、 値引数からパターン引数に対しての束縛の集合を作ります。
参照パターン (x as pat) が与えられた時、 値が pat にマッチしたらその値はこのパターンにマッチします。 そしてこのマッチは、値を pat にマッチさせて x から値への束縛を作ります。