A versão da função é uma abreviação para a sintaxe de correspondência completa no caso especial em que a instrução de correspondência é a função inteira e a função tem apenas um único argumento (as tuplas contam como um). Se você quiser ter dois argumentos, precisará usar a sintaxe de correspondência completa *. Você pode ver isso nos tipos das duas funções a seguir.
//val match_test : string -> string -> string
let match_test x y = match x, y with
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
//val function_test : string * string -> string
let function_test = function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
Como você pode ver, a versão de correspondência leva dois argumentos separados, enquanto a versão da função usa um único argumento tuplado. Eu uso a versão de função para a maioria das funções de argumento único, pois acho que a sintaxe da função parece mais limpa.
* Se você realmente quiser, pode obter a versão da função para ter o tipo de assinatura correto, mas parece muito feio na minha opinião - veja o exemplo abaixo.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"