ジェネリックな機能

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

以下はどちらでも同じ意味になります。
ジェネリックな関数の表記
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 |> print_int;;
hash "abc" |> print_int;;

Generic Pretty Print

以下に紹介する2つの関数とprintf系関数の%Aという書式は 任意の複合的な型に対してpretty printを行うのに 利用することができます。 覚えておくと便利な関数です。
PrettyPrintを行う関数
any_to_string (Some(100,[1.0;2.0;3.1415]));;
sprintf "result = %A" ([1],[true]);;
print_any ([|"abc";"def"|],10uy,3.14f);;