OCaml environment config with typed validation

OCaml
let getenv name = match Sys.getenv_opt name with Some v when String.trim v <> "" -> Some v | _ -> None

let required name =
  match getenv name with
  | Some value -> Ok value
  | None -> Error (Printf.sprintf "missing required env var %s" name)

let int_var name ~default =
  match getenv name with
  | None -> Ok default
  | Some raw ->
    match int_of_string_opt (String.trim raw) with
    | Some n -> Ok n
    | None -> Error (Printf.sprintf "%s must be an integer, got %S" name raw)

let load () =
  match (required "DATABASE_URL", int_var "PORT" ~default:8080) with
  | Ok url, Ok port when port > 0 && port < 65_536 -> Ok (url, port)
  | Ok _, Ok port -> Error (Printf.sprintf "PORT out of range: %d" port)
  | Error e, _ | _, Error e -> Error e