title: Is there ever a good reason to use unsafePerformIO?
body: <p>The question says it all. More specifically, I am writing bindings to a C library, and I'm wondering what c functions I can use <code>unsafePerformIO</code> with. I assume using <code>unsafePerformIO</code> with anything involving pointers is a big no-no.</p>
  
  <p>It would be great to see other cases where it is acceptable to use <code>unsafePerformIO</code> too.</p>