我在 F# 中工作,并且有一个 T 类型,它是几件事的有区别的联合:
type T =
| A of string * int
| B of int
| C
如果我有一个 T 列表,我可能想取出使用 A 构造的东西。像这样进行模式匹配很容易:
myList
|> List.filter (fun x -> match x with | A(_,_) -> true | _ -> false)
嵌入的匹配有点冗长,并且在保持下划线数量与 A 的定义同步方面存在一些小的维护麻烦。我真的很喜欢这样的函数:
let constructedFrom (type constructor) (t : T) : bool = something
myList
|> List.filter (constructedFrom A)
有没有办法定义这个“constructedFrom”函数?