1 private@ 2 3 do 4 let f (s : String) = 5 let! x = i32.try_parse s 6 x as u32 + 2 |> Some 7 8 let r1 = f "5" 9 assert r1 == Some 7 10 11 let r2 = f "5k" 12 assert r2.is_none 13 14 let parse_number (s : String) = 15 let maybe_number = i32.try_parse s 16 case maybe_number of 17 None -> Result/Error "cannot parse number from $s" 18 Some number -> Result/Ok number 19 20 do 21 let f (s : String) = 22 let! x = parse_number s 23 x + 2 |> Some 24 25 let r1 = f "5" 26 assert r1 == Some 7 27 28 let r2 = f "5k" 29 assert r2.is_none 30 31 do 32 let f (s : String) = 33 let! x = parse_number s 34 x + 2 |> to_string |> Result/Ok 35 36 let r1 = f "5" 37 assert r1 == Result/Ok "7" 38 39 let r2 = f "5k" 40 assert r2.is_error 41 42 do 43 let f (s : String) = 44 let! x = i32.try_parse s |> to_result "cannot parse" 45 x + 2 |> Result/Ok 46 47 let r1 = f "5" 48 assert r1 == Result/Ok 7 49 50 let r2 = f "5k" 51 assert r2 == Result/Error "cannot parse" 52 53 type ParseError = String 54 type Error = 55 | t@ ParseError 56 57 do 58 let f (s : String) : Result<i32, Error> = 59 let! x = let error = ParseError s 60 i32.try_parse s |> to_result error 61 x + 2 |> Result/Ok 62 63 let r1 = f "5" 64 assert r1 == Result/Ok 7 65 66 let r2 = f "5k" 67 let error2 = ParseError "5k" as Error 68 assert r2 == Result/Error error2 69