typeで型に別名を付ける

type使えば型に別名付けれるのか。C++のtypedefっぽい。
以下は、float*floatなタプルを例に、そのデータ型に対する+演算子オーバーロードしてベクトルの和を計算させてみるって簡単な話。

> type Vector2D<'a> = 'a*'a;;

type Vector2D<'a> = 'a * 'a

> let x:Vector2D<float> = 3.0, 5.0;;

val x : Vector2D<float> = (3.0, 5.0)

> let (+) (lhs:Vector2D<float>) (rhs:Vector2D<float>) = 
    (fst lhs)+(fst rhs), (snd lhs)+(snd rhs);;

val ( + ) : float * float -> float * float -> float * float

> let a:Vector2D<float> = 1.0, 3.0;;

val a : Vector2D<float> = (1.0, 3.0)

> let b:Vector2D<float> = 2.0, 4.0;;

val b : Vector2D<float> = (2.0, 4.0)

> a + b;;
val it : float * float = (3.0, 7.0)