假设我有一个如此定义的F#区别联盟:
type Union<'T> = | A of 'T | B | C
例如,如果B
'T
int
为B
,我将如何将其转换为另一个'T
,其中string
为{ {1}}?我有一个类似的联盟,但有更多的情况,目前我模式匹配像这样:
let convert u =
match u with
| A(x) -> // some fancy logic here
| B -> B
| C -> C
答案 0 :(得分:8)
此功能通常称为map
。第一个参数是一个函数(a -> b)
来转换内部值:
let map f = function
| A(x) -> (A (f x))
| B -> B
| C -> C
您可以像以下一样使用它:
let stringUnion = (A(123)) |> map (fun i -> i.ToString())