2

假设我定义了一个 F# 可区分联合,如下所示:

type Union<'T> = | A of 'T | B | C

例如,如果我有一个Bwhere 'Tis int,我将如何将它转换为另一个Bwhere 'Tis a string?我有一个与此类似的联合,但有更多情况,目前我的模式匹配如下:

let convert u =
  match u with
  | A(x) -> // some fancy logic here
  | B -> B
  | C -> C
4

1 回答 1

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())
于 2014-01-21T13:42:25.297 回答