pure a >>= f ≡ f a
m >>= pure ≡ m
I’m sure most real-world Haskell programs are “incorrect” in some way.