Julia validated environment configuration loader

Julia
function load_config(env=ENV)
    spec = Dict("PORT" => (Int, "8080"), "HOST" => (String, "127.0.0.1"),
                "DEBUG" => (Bool, "false"))
    cfg, errs = Dict{String,Any}(), String[]
    for (key, (T, default)) in spec
        raw = get(env, key, default)
        try
            cfg[key] = T === Bool ? parse(Bool, lowercase(raw)) : parse(T, raw)
        catch
            push!(errs, "$key must be a $T, got $raw")
        end
    end
    isempty(errs) || error("Invalid config:\n  " * join(errs, "\n  "))
    return cfg
end

println(load_config(Dict("PORT" => "3000")))