I think what's happening is that {readr} first looks at the parameter you provide. It notices that it starts with an "https://", so it's a url and needs downloading. This, readr looks at the extension, and doesn't find any (no ".gz" at the end), so it assumes it's text, downloads it as text, and then you get an unusable file.
So in your case, you need to tell readr explicitly that what you want to download is a gzip file:
Thank you so much, this works! Quick follow-up question, why does readr::read_csv() know that the local file (without any extension) is a gzip file? What is the technical reason that this does not work for remote connections?
You'd want to read the source code of read_csv() to know for sure, my guess is it's using something like file("PRC_HICP_MIDX") to get details, which in turn will work a bit like Linux's file command and use various approaches (including reading the header at the beginning of the binary file) to guess the filetype.
When you give an url, there is no direct access to the file content, so readr makes a guess purely based on the url. If it was an important enough use case, I image readr could download the beginning of the file, look at it to guess the type, discard it, and then download again the right way. I imagine that would come with its own problems, and is probably uncommon enough that they didn't implement that.