MSDN の Type Extensions ページからの次のビットが関連しています (強調は私のものです)。
型拡張には、構文と動作がわずかに異なる 2 つの形式があります。組み込み拡張機能は、拡張される型と同じ名前空間またはモジュール、同じソース ファイル、および同じアセンブリ (DLL または実行可能ファイル) に表示される拡張機能です。オプションの拡張機能は、拡張される型の元のモジュール、名前空間、またはアセンブリの外部に現れる拡張機能です。型がリフレクションによって検査されると、組み込みの拡張機能が型に表示されますが、オプションの拡張機能は表示されません。オプションの拡張機能はモジュール内にある必要があり、拡張機能を含むモジュールが開いている場合にのみスコープ内にあります。
オプションの拡張の目的は明確です。アセンブリに属していない型に新しい機能を挿入するのに役立ちます。たとえば、FSharpx はこれを使用して、プリミティブ型を解析するためのさまざまなヘルパーを作成します。
open System
type Boolean with
static member parse x =
match bool.TryParse(x) with
| true,v -> Some v
| _ -> None
では、なぜ固有の拡張が必要なのですか? 答えは、その利便性です。明確な目的を持つ複数のセクションに型定義を分割すると便利です。
多くの F# ライブラリで、型定義 -> ユーティリティ関数 -> 組み込み拡張というパターンの使用を見てきました。このようにして、型に洗練されたユーティリティ関数を定義し、それらをモジュールで使用できるようにし、メンバー定義で直接使用することができます。パターンを確認するには、F# PowerPack のComplex型を参照してください。
編集:
正直なところ、私はよく型拡張と型拡張を同じ意味で使用します。重要なのは、それらが組み込みかオプションかです。