Given
pure id <*> v = v
holds, can pure do anything observable and not break the law?
If I define a type that encapsulates IO and say, spawn a new thread, is GHC free to optimize it away?
EDIT: I finally realized that the question actually is about consequences of having an unlawful instance of IO...