通用TryValue類型的語法是什麼,它可以返回值'a或錯誤'b?f#歧義聯合通用
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))
看起來像有結果類型在[F#4.1](https://blogs.msdn.microsoft.com/dotnet/2016/07/25/a-peek-into-f-4-1/) – s952163