F#のシーケンスから単一のアイテムを抽出するか、存在しないか複数ある場合はエラーを出します。これを行うための最良の方法は何ですか?
私は現在持っています
let element = data |> (Seq.filter (function | RawXml.Property (x) -> false | _ -> true))
|> List.of_seq
|> (function head :: [] -> head | head :: tail -> failwith("Too many elements.") | [] -> failwith("Empty sequence"))
|> (fun x -> match x with MyElement (data) -> x | _ -> failwith("Bad element."))
それはうまくいくようですが、それは本当に最良の方法ですか?
編集:私は正しい方向に向けられたので、私は次のことを思いついた:
let element = data |> (Seq.filter (function | RawXml.Property (x) -> false | _ -> true))
|> (fun s -> if Seq.length s <> 1 then failwith("The sequence must have exactly one item") else s)
|> Seq.hd
|> (fun x -> match x with MyElement (_) -> x | _ -> failwith("Bad element."))
もう少しいいと思います。