如何部分应用活动模式



Fsharpx.Extras NuGet包公开了一个用于正则表达式匹配的活动模式,限定为Fsharpx.Text.Regex.Match

第一个参数是BCL中的RegexOptions值。

不必写:

let someFunc =
    | Match RegexOptions.None "...pattern 1..." matches -> ...
    | Match RegexOptions.None "...pattern 2..." matches -> ...
    | Match RegexOptions.None "...pattern 3..." matches -> ...
    ...

希望有可能(使用修订的Match'活动模式(:

let someFunc =
    | Match' "...pattern 1..." matches -> ...
    | Match' "...pattern 2..." matches -> ...
    | Match' "...pattern 3..." matches -> ...
    ...

我提出的Match'的一个可能定义是:

let (|Match'|_|) pattern =
    function
    | Match RegexOptions.None pattern matches -> Some matches
    | _ -> None

这很好用。然而,我忍不住想知道是否还有其他类似于部分应用函数的方法,比如:

let (|Match'|_|) =
    Match RegexOptions.None

令人沮丧的是,这抱怨Type has no accessible object constructors.

类似于后者(alebit失败(的方法可能吗

打开Regex模块,然后将上一个示例更改为

let (|Match|_|) = (|Match|_|) RegexOptions.None

事实上,如果您查看源代码,您将在Compiled模块中看到这方面的一个示例。

https://github.com/fsprojects/FSharpx.Extras/blob/master/src/FSharpx.Extras/Regex.fs

最新更新