如何在f#中解释这个部分函数语法?

mar*_*elf 2 f#

我正在阅读f#代码,我对语法感到困惑.解析器类型介绍如下:

type Parser<'r> = Parser of (char list -> ('r*char list) list)
Run Code Online (Sandbox Code Playgroud)

这由译员评估为:

type Parser<'r> = | Parser of (char list -> ('r * char list) list)
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义.然后,引入了一行新代码:'还需要应用解析器函数,因此我们为它定义了一个部分函数:',以及后面的代码:

let parse (Parser p) = p
Run Code Online (Sandbox Code Playgroud)

并且解释器输出是:

Parser<'a> -> (char list -> ('a * char list) list)
Run Code Online (Sandbox Code Playgroud)

我很惊讶这甚至是有效的语法.它是什么,为什么需要它?

非常感谢

kvb*_*kvb 9

一般来说

let f模式的=身体

相当于

let f = function
|模式的 ->身体

或者,更加冗长,

let f x =
    match x with
    |模式的->身体

这样可以避免引入一个新的标识符,该标识符会立即被解构,然后再也不会被使用.

在这个特定的例子中,这意味着parse相当于:

let parse x = 
    match x with
    | Parser p -> p
Run Code Online (Sandbox Code Playgroud)

由于该Parser类型中只有一个案例,因此这种解构将永远成功.