Why does WP_Post not contain its permalink?

WP_Post is a representation of the post as it exists in the database, and the permalink isn’t stored in the database.

It’s not stored in the database because it’s not a property of the post. The permalink is determined by the site’s address, its permalink structure, and the post’s slug. Imagine if updating the permalink structure on your site required that every post in the database had to be updated.

But then, I can’t do something like this to get the title:

get_title($prevPost);

You can

get_the_title($prevPost);

For consistency’s sake, you can also do:

get_the_permalink($prevPost);