Рассматривали ли вы добавление в файл .ghci что-то вроде:
instance (Show a) => Show (IORef a) where
show a = show (unsafePerformIO (readIORef a))
Это совсем не безопасно, но если это только для вашего личного использования, возможно, это нормально.
Для более общего использования ранее приведенные ответы выглядят хорошо для меня. То есть либо определите статическое сообщение «Я не могу показать это»:
instance Show (IORef a) where
show _ = "<ioref>"
Это даст что-то вроде:
> runFunc
MyStruct <ioref> 4 "string val"
Или используйте пользовательскую функцию. Я предлагаю сделать урок и снять все экземпляры Show:
class ShowIO a where
showIO :: a -> IO String
instance Show a => ShowIO a where
showIO = return . show
instance ShowIO a => ShowIO (IORef a) where
showIO a = readIORef a >>= showIO
Предоставление вывода (не проверено, это просто рукописный текст):
> myFunc >>= showIO
MyStruct "My String in an IORef" 4 "string val"