F#は、自動型変換を行いませんを参照してくださいSeq.toList
を必要とせずに一致させることができる唯一のコレクション型であると信じています。つまり、異なる型の2つの値を比較することはできません。たとえその一方が他方の型のサブタイプであっても比較することはできません。あなたの特定のケースにこれを適用する
let x : string = "abc"
let y : obj = box "abc"
let eq = x = y // Type mismatch error here
、あなたはその値が何らかの形で、リストのサブタイプであっても、リスト上の非リストの値と一致することはできません。
let (|IsList|) l = Seq.toList l
:あなたは、マッチングのこの種では本当に興味があるなら
しかし、あなた自身seq<'t>
を取ると、通常のF#のリストとそれにマッチします(また、「active pattern」として知られている)、カスタム照合を、書くことができます
このようなマッチャがseq
ことができるものと使用可能です - でも、例えば、文字列:あまりにも通常のリストの
match "abcd" with
| IsList [] -> "Empty string"
| IsList ('a'::_) -> "Starts with an a"
| IsList _ -> "Something else"
ワークス:
match [1,2,3] with
| IsList [1,2,3] -> "One, two, three"
| IsList [] -> "Empty list"
| IsList _ -> "Huh?"