我不认为使用单一模式有一个很好的方法,但您可以定义一个活动模式,它将为您提供另一种合并两种苹果的数据视角:
let (|AnyApple|Banana|) = function | Apple a | MoreApples a -> AnyApple a | Banana -> Banana
这隐藏了标准Banana
定义 - 你应该使用另一个名称来避免混淆,但其余的保持不变.现在您可以使用AnyApple
以下模式匹配:
let speakFruit = function | AnyApple GrannySmith -> "granny smith" | AnyApple Gala -> "gala" | Banana -> "banana"