ファイルやプロジェクトでの型の整理
F# には宣言の順番について、知っておくべき厳しいルールがある ファイルの上部にある型は、ファイルの下部にある別の型を参照できない
コンパイル順が前のファイルは、後のファイルを参照できない
型をコーディングする際に、型をどのように整理するか考える必要がある
標準的なアプローチ: すべてのドメイン型を Type.fs や Domain.fs などの 1 つのファイルにまとめる 依存する関数は後ろに置いて、コンパイル順に並べる
型の数が多く、複数のファイルに分割する必要がある場合
共有されるものを先に置き、サブドメイン固有のものを後に置く
code:fsharp
Common.Types.fs
Common.Functions.fs
OrderTaking.Types.fs
OrderTaking.Functions.fs
Shipping.Types.fs
Shipping.Functions.fs
ファイル内では、単純な型を一番上に、それに依存する複雑な型を下に並べる
code:fsharp
module Payments =
// 単純型
type CheckNumber = CheckNumber of int
// ドメイン型
type PaumentMethod =
| Cash
| Check of CheckNumber
| Card of ...
// トップレベル型
type Paument = {
Amount : ...
Currency : ...
Method : PamentMethod
}
module rec を使用すると、モジュール内のどこでも型同士を参照できる
v4.1 ~ の機能で、それまでは and を使っていた
ただし、and を用いて型を正しい依存関係の順序に置いたほうが、他の F# との整合性が保たれる
code:fsharp
module rec Pauments =
type Paument = {
Amount : ...
Currency : ...
Method : PamentMethod
}
type PaumentMethod =
| Cash
| Check of CheckNumber
| Card of ...
type CheckNumber = CheckNumber of int