次の(簡略化された)スニペットは、静的に解決された型パラメーターを一貫して使用する、私が実装しているアプリケーションから抜粋したものです。
type A< ^B when ^B : (static member MyMember : Unit -> Unit)> = {
Field : unit
}
type TestA = {
AField : A< BTy >
}
and BTy = {
BField : Unit
} with
static member MyMember () = ()
IntelliSenseは、フィールドAField(AField : A< BTy >
)のタイプを定義すると、次のエラーを表示します。タイプ'BTy'は、'MyMember'という名前の演算子をサポートしていません。
編集済み。それらを別々に宣言することは機能しますが、相互参照があり、2つのタイプの共通の情報を含む上部に配置する3番目のタイプを宣言できない場合。この問題を回避するにはどうすればよいですか?とにかく、それが機能する定義の下で定義するlet pluto = ("" :> obj) :?> A< BTy >
と、両方のタイプがletバインディングから見えるので想像します。