In Haskell, there is a function called `unsafeCoerce`, that turns anything into any other type of thing. What exactly is this used for? Like, why we would you want to transform things into each other in such an "unsafe" way?

Provide an example of a way that `unsafeCoerce` is actually used. A link to Hackage would help. Example code in someones question would not.