tldr Just because the compiler knows how to convert them doesn't mean that this conversion happens if you don't tell the compiler to perform the conversion.
The read_to_string method returns a Result containing an io error, but you told the compiler that main should return a Result containing an anyhow error. Since the types don't match, it fails to compile.
To fix this, convert the error. To use the style in your post, you can use map_err to do it. Here I convert the error using into(), because the compiler knows how to convert an io error into an anyhow error.