f# 歧视联合泛型
f# discriminated union generic
可以return 'a 的值或 'b 的错误的通用 TryValue 类型的语法是什么?
type TryValue =
| Value of 'a
| Error of 'b
如果错误是一个字符串就没问题:
type 'a TryValue =
| Value of 'a
| Error of string
我想定义一个 tryRun 函数,它接受一个错误创建器、一个函数和一个参数,该函数将尝试 运行 带有参数的函数,并在任何错误时使用错误创建器函数来创建一个错误:
let tryRun createErrorFn param fn =
try
Value (fn param)
with
| ex -> Error (createErrorFn ex.Message param)
以及由 tryRun 包装的任何函数的包装器:
let wrapTryRun createErrorFn fn param =
match param with
| Value a -> tryRun createErrorFn a fn
| Error e -> Error e
现在我可以运行一个函数列表(伪代码,还没有完全算出来):
let createErrorFn errorMessage param =
URLProcessignError {url=param.url;errorMessage=errorMessage}
[fn1;fn2] |> List.fold (fun acc fn -> (wrapTryRun createErrorFn fn acc))
您缺少左侧的通用参数:
type TryValue<'a,'b> =
| Value of 'a
| Error of 'b
当它只有一个参数时,您可以像处理字符串一样使用 ML 样式,但如果您有多个参数,则应使用带有 <
>
尖括号.
实际上,旧的 ML 样式也可以通过指定一个元组与多个类型参数一起使用:
type ('a, 'b) TryValue =
| Value of 'a
| Error of 'b
但是,我相信我读到旧语法已被弃用......
可以return 'a 的值或 'b 的错误的通用 TryValue 类型的语法是什么?
type TryValue =
| Value of 'a
| Error of 'b
如果错误是一个字符串就没问题:
type 'a TryValue =
| Value of 'a
| Error of string
我想定义一个 tryRun 函数,它接受一个错误创建器、一个函数和一个参数,该函数将尝试 运行 带有参数的函数,并在任何错误时使用错误创建器函数来创建一个错误:
let tryRun createErrorFn param fn =
try
Value (fn param)
with
| ex -> Error (createErrorFn ex.Message param)
以及由 tryRun 包装的任何函数的包装器:
let wrapTryRun createErrorFn fn param =
match param with
| Value a -> tryRun createErrorFn a fn
| Error e -> Error e
现在我可以运行一个函数列表(伪代码,还没有完全算出来):
let createErrorFn errorMessage param =
URLProcessignError {url=param.url;errorMessage=errorMessage}
[fn1;fn2] |> List.fold (fun acc fn -> (wrapTryRun createErrorFn fn acc))
您缺少左侧的通用参数:
type TryValue<'a,'b> =
| Value of 'a
| Error of 'b
当它只有一个参数时,您可以像处理字符串一样使用 ML 样式,但如果您有多个参数,则应使用带有 <
>
尖括号.
实际上,旧的 ML 样式也可以通过指定一个元组与多个类型参数一起使用:
type ('a, 'b) TryValue =
| Value of 'a
| Error of 'b
但是,我相信我读到旧语法已被弃用......