andってのはクラス定義の循環参照に使うのか

クラス間の循環参照、C++だと前方宣言してごまかすようなところを、F#ではandを使ってクラスの定義をつなげることで対応するらしい。全然使わないから人様のコード読んでも???だったわ。以下の例は循環参照はしてないけどandでクラス定義をつないだ例。

type Hoge0 =
 abstract member func1 : int -> int
and Hoge1(x:int) = 
    member this.moge() = 1
and Hoge2(x:int) = 
    member this.moge() = 2

[<EntryPoint>]
let main argv = 
    let x = Hoge1(2)
    printfn "%d" (x.moge())
    let y = Hoge2(2)
    printfn "%d" (y.moge())
    0

七誌さんが書いた

の「クラス定義の循環参照」を見るといいな。