3
我已經從Railway oriented programming複製驗證模塊,在我的應用程序執行的錯誤處理:編譯錯誤Kleisli組合物
type ErrorMessage = ErrorMessage of string
type ValidationResult<'T> =
| Success of 'T
| Error of ErrorMessage
module ValidationResult =
let doubleMap successHandler errorHandler = function
| Success x -> successHandler x
| Error e -> errorHandler e
let bind f = function
| Success x -> f x
| Error e -> Error e
let (>=>) f g = f >> bind g
我通過使用下列測試功能測試Kleisli組合物:
let validation1 (list: int list) =
if List.length list = 6
then Success list
else Error <| ErrorMessage "Length error"
let validation2 list =
if List.forall (fun x -> x > 6) list
then Success list
else Error <| ErrorMessage "All elements must be larger than 6"
let combined = validation1 >=> validation2
//^^^^^^^^^^^^ compile error
據我的理解,validation1
和validation2
應該組成,因爲它們都是int list -> ValidationResult<int list>
類型。然而,我得到了一個編譯錯誤
期待一種類型支持運算符'> =>',但給予函數 類型。您可能會錯過某個函數的參數。
我該如何解決這個問題?
你忘了打開ValidationResult嗎? –
@FyodorSoikin,來自我的一個愚蠢的錯誤......沒有意識到這很簡單。如果你把你的評論作爲答案,我會很樂意接受它。謝謝 – rexcfnghk