I have a data type which contains an IORef as an important element. This means there is not a clean way to make it a member of the show
type class. This is not too bad as I have a print
function in the IO monad for this type. But it is annoying in GHCi in that every time I return one of these thing as a result I get an error stating that it cannot be shown.
Is there a way to get GHCi, which operates in the IO monad anyway, to use an IO action to show a result? If not, would there be any negative consequences to writing show a = unsafePerformIO $ print a
?
show
to display results. However, you can define a show instance for your datatype that simply displays "<ioref>" or the like for the ioref. That's probably slightly cleaner, if less convenient, than usingunsafePerformIO
. – Chili