[英]f# discriminated union generic
可以返回“ a”值或“ b”錯誤的通用TryValue類型的語法是什么?
type TryValue =
| Value of 'a
| Error of 'b
如果error是一個字符串,那就沒問題了:
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樣式,但是如果有多個參數,則應使用帶有<
>
尖括號的.NET表示法。
實際上,通過指定一個元組,舊的ML樣式也可以與多個類型參數一起使用:
type ('a, 'b) TryValue =
| Value of 'a
| Error of 'b
但是,我相信我已棄用舊語法…
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.