Я согласен с другими, что использование списка символов для выполнения серьезных манипуляций со строками, вероятно, не идеально. Однако, если вы хотите продолжать использовать этот подход, один из способов приблизиться к тому, о чем вы просите, - это определить активный шаблон. Например:
let rec (|Prefix|_|) s l =
if s = "" then
Some(Prefix l)
else
match l with
| c::(Prefix (s.Substring(1)) xs) when c = s.[0] -> Some(Prefix xs)
| _ -> None
Тогда вы можете использовать его как:
let rec Process html =
match html with
| Prefix "-->" tail -> ("→" |> List.of_seq) @ Process tail
| head :: tail -> head :: Process tail
| [] -> []