La versión de la función es una forma abreviada de la sintaxis de coincidencia completa en el caso especial en el que la declaración de coincidencia es la función completa y la función solo tiene un único argumento (las tuplas cuentan como uno). Si desea tener dos argumentos, debe usar la sintaxis de coincidencia completa *. Puede ver esto en los tipos de las siguientes dos funciones.
//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 puede ver, la versión de coincidencia toma dos argumentos separados, mientras que la versión de la función toma un solo argumento tuplado. Utilizo la versión de la función para la mayoría de las funciones de un solo argumento ya que encuentro que la sintaxis de la función parece más limpia.
* Si realmente lo desea, puede obtener la versión de la función para que tenga el tipo de firma correcto, pero en mi opinión se ve bastante feo; vea el ejemplo a continuación.
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"