次のようなものを .ghci ファイルに追加することを検討しましたか?
instance (Show a) => Show (IORef a) where
show a = show (unsafePerformIO (readIORef a))
まったく安全ではありませんが、これが個人的な使用のためだけであれば、おそらく問題ありません。
より一般的な使用のために、以前に与えられた答えは私には良さそうです。つまり、静的な "I can't show this" メッセージを定義します。
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"