Ответ 1
Вы можете запускать два шаблона вместе с помощью &
. Вы оставили некоторые детали в своем вопросе, поэтому здесь некоторый код, который я предполагаю, несколько похож на то, что вы делаете.
let (|Header|_|) (input:string) =
if input.Length > 0 then
Some <| Header (input.[0])
else
None
let (|Body|_|) (input:string) =
if input.Length > 0 then
Some <| Body (input.[1..])
else
None
Первый шаблон захватит первый символ строки, а второй вернет все, кроме первого символа. Следующий код демонстрирует, как использовать их вместе.
match "Hello!" with
| Header h & Body b -> printfn "FOUND: %A and %A" h b
| _ -> ()
Отпечаток: FOUND: 'H' and "ello!"