Jwo*_*sty 2 generics f# discriminated-union
假设我有一个F#区别联合定义如下:
type Union<'T> = | A of 'T | B | C
Run Code Online (Sandbox Code Playgroud)
如果我有B这个地方'T是int例如,我将如何转换到另一个B地方'T是string?我有一个类似于此的联合,但有更多的情况,目前我模式匹配如下:
let convert u =
match u with
| A(x) -> // some fancy logic here
| B -> B
| C -> C
Run Code Online (Sandbox Code Playgroud)
通常调用此函数map.第一个参数是一个(a -> b)转换内部值的函数:
let map f = function
| A(x) -> (A (f x))
| B -> B
| C -> C
Run Code Online (Sandbox Code Playgroud)
您可以像以下一样使用它:
let stringUnion = (A(123)) |> map (fun i -> i.ToString())
Run Code Online (Sandbox Code Playgroud)