ジェネリックな機能

ジェネリックな関数の表記法

以下はどちらでも同じ意味になります。
ジェネリックな関数の表記
type 'a list = ...
type list<'a> = ...

Generic Comparison

F#の論理演算子(=,<,<=,>,>=)とmin,max,compare関数は 賢い比較を行います。
再帰的な比較
//タプルは左から右に再帰的に比較してくれる
("abc","def") < ("abc","xyz");;
compare (10,30) (10,20);;
これらの比較は、IComparableインタフェースを実装することで、 ユーザも制御することが出来ます。

Generic Hashing

F#にはハッシュ値を計算するための関数hashがあります。 Generic Comparisonと同様に、 タプルやリストなどを用いた複合的な型に対して 再帰的にハッシュ値を計算してくれます。
hash関数
hash 100 |> printfn "%d"
hash "abc" |> printfn "%d";;

Generic Pretty Print

以下に紹介するprintf系関数の%Aという書式は 任意の複合的な型に対してpretty printを行うのに 利用することができます。 覚えておくと便利です。
PrettyPrintを行う関数
let pp = sprintf "result = %A" ([1],[true])
printfn "%s" pp
printfn "%A" [(1,"a");(2,"b")]