У меня есть тип данных, который содержит IORef как важный элемент. Это означает, что нет простого способа сделать его членом класса типов show
. Это не так уж плохо, так как у меня есть функция print
в монаде IO для этого типа. Но в GHCi это раздражает тем, что каждый раз, когда я возвращаю одну из этих вещей, в результате я получаю сообщение об ошибке, в котором говорится, что это невозможно показать.
Есть ли способ заставить GHCi, который в любом случае работает в монаде IO, использовать действие IO для отображения результата? Если нет, будут ли негативные последствия написания show a = unsafePerformIO $ print a
?
show
, для отображения результатов. Однако вы можете определить экземпляр show для вашего типа данных, который просто отображает ‹ioref› или что-то подобное для ioref. Это, вероятно, немного чище, хотя и менее удобно, чем использованиеunsafePerformIO
. - person sclv   schedule 01.12.2011