Haskell does OO just fine. It doesn't do nominal subtyping, but that's really a misfeature in OO anyway.
That said, persistent doesn't do OO.
That said, persistent doesn't do OO.
If I can model your type/language model as a higher-kinded dependently typed lambda calculus (e.g. using Boehm-Berarducci encoding for non-turing complete recursive ADT definitions), then it's not OO -- it's functional programming, rediscovered.