F# JSON parsing with descriptive errors

F#
open System.Text.Json

let requireField (name: string) (el: JsonElement) =
    match el.TryGetProperty name with
    | true, value -> Ok value
    | _ -> Error $"missing field '{name}'"

let parseInt (name: string) (el: JsonElement) =
    requireField name el
    |> Result.bind (fun v ->
        match v.TryGetInt32() with
        | true, n -> Ok n
        | _ -> Error $"field '{name}' must be an integer")

let parseAge (json: string) =
    try
        use doc = JsonDocument.Parse json
        parseInt "age" doc.RootElement
    with :? JsonException as ex ->
        Error $"invalid JSON: {ex.Message}"