ErrorOr<std::string> slurp(std::string path) {
    ErrorOr<std::vector<char>> v = slurpv<char>(path);
    if (!v) {
        return {v.as_error(), std::string{}};
    }
    std::string s{v->begin(), v->end()};  /* Note that here we make a copy */
    return {NoError(), std::move(s)};
}