let validate_int s = if String.length s = 0 then Left "empty" else let rec all_digits i = if i >= String.length s then true else let c = s.[i] in if c >= '0' && c <= '9' then all_digits (i + 1) else false in if all_digits 0 then Right (int_of_string s) else Left ("not a number: " ^ s) let process inputs = List.fold_left (fun (errs, vals) s -> match validate_int s with | Left _ -> (errs + 1, vals) | Right v -> (errs, vals + v) ) (0, 0) inputs ;; let (errs, sum) = process ["12"; "abc"; "5"; ""; "100"; "x"] in errs * 100 + sum