Я не знаю ни одного шаблона, который делает то, что вы хотите, но вы могли бы сделать это:
let allSame L =
match L with
| [] | [_] -> L
| h::t when t |> List.forall ((=) h) -> L
| _ -> failwith "unpossible!" //handle the failing match here
* 1003 P.S *. Вы говорите о последовательности, но ваше совпадение показывает, что вы работаете со списком. Соответствующий код последовательности будет выглядеть примерно так:
let allSameSeq s =
match Seq.length s with
| 0 | 1 -> s
| _ when Seq.skip 1 s |> Seq.forall ((=) (Seq.head s)) -> s
| _ -> failwith "unpossible!"
Имейте в виду, что производительность этой функции может быть хуже, чем на основе списка.