わかりました。ほとんどの LINQ 操作には、F# に相当するものがあります。(Seq= IEnumerable であるため、通常は Seq モジュールにあります)
と同等のものを見つけることができません。(Seq.find である) よりも優先します。これはより防御的であるためです。状態が期待どおりであると主張しIEmumerable.Single
ますSingle
。First
したがって、いくつかの解決策があります (Seq.find を使用する以外に)。(これらは拡張メソッドとして記述できます)
私だけが呼び出しているこの関数の型シグネチャは、
('a->bool) -> seq<'a> -> 'a
let only = fun predicate src -> System.Linq.Enumerable.Single<'a>(src, predicate)
let only2 = Seq.filter >> Seq.exactlyOne
only2
が推奨されますが、コンパイルされません (その手がかりはありますか?)。