F# field-level input validation errors

F#
type Errors = Map<string, string list>

let validateUser (name: string) (email: string) (age: int) : Errors =
    [ if String.IsNullOrWhiteSpace name then yield "name", "name is required"
      if not (email.Contains "@") then yield "email", "must contain @"
      if age < 18 then yield "age", "must be 18 or older"
      if age > 130 then yield "age", "must be 130 or younger" ]
    |> List.fold (fun acc (field, msg) ->
        Map.add field (msg :: (Map.tryFind field acc |> Option.defaultValue [])) acc) Map.empty

let showErrors errors =
    errors |> Map.iter (fun field msgs -> printfn "%s: %s" field (String.concat "; " msgs))

validateUser "" "ada" 15 |> showErrors