後でIDisposable
処理する必要がある s が大量にあるため、使い捨てのリストとパススルー関数を設定して、副作用として項目をリストに追加します。
let mutable disposables = []
let (~-) (x:'a) = disposables <- x :: disposables; x
うまくいけばこれができるように:
let thing1 = -new Form()
let thing2 = -new Control()
for i in disposables do i.Dispose()
問題は、F# が に自動的に制約'a
しIDisposable
、次の警告メッセージが表示されることです。
この構成により、コードは型注釈で示されるよりも一般的ではなくなります。型変数 'a は型 'IDisposable' に制限されています。
そのため、戻り値の型operator ~-
が IDisposable になり、関数の利便性が損なわれます。
F# がこの制約を作成しないようにする方法はありますか?