У меня есть модуль проверки скопированный из Railway oriented programming, который выполняет обработку ошибок в моем приложении:Ошибка компиляции для композиции Клейла
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
Я проверял состав Клейл, используя следующие функции тестирования:
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