I mean, at least the former will be somewhat working and with proper IDE support.
Lets say you have a huge overly-convoluted Haskell program. Somewhere deep down a call hierachy of pure functions you need to print something to the console. That is not easy to refactor.
Or vice-versa you have a huge convoluted program where everything happens inside an IO monad because at some point something is written to the console. Now you realize you dont need to write to the console.
Pure functions are great, but they are not a panacea.
> Or vice-versa you have a huge convoluted program where everything happens inside an IO monad because at some point something is written to the console. Now you realize you dont need to write to the console.
These problems are essentially completely resolved these days by a modern effect system like effectful. Basically, they allow you to do arbitrary effects deep down a call stack with minimal plumbing (you still have adjust the types, as you should: that's the point of effect tracking!) and also to remove effects, so you can easily convert between pure code and "effectful code that just so happens to do no effects".
Inplementation inheritance is a useful tool when you need it, but it’s not that central to OOP.
Many other apps don't have many states to manage, OOP is bad for them.
Wouldnt that be a has-a relationship? Represented by composition rater than inheritance.
Both. You can have a RVVehicle class and a RVHabitat class. Nothing is forcing you to have 1 class. If it makes more sense to be just one class you can also make it a subclass of 2 classes.
>Are writers children of nationality or is nationality a child of writer?
Nationality would be a child of writer.
Edit: A good book: https://en.m.wikipedia.org/wiki/Higher-Order_Perl