Tho*_*son 11
您是否考虑过将以下内容添加到.ghci文件中:
instance (Show a) => Show (IORef a) where
show a = show (unsafePerformIO (readIORef a))
Run Code Online (Sandbox Code Playgroud)
它根本不安全,但如果这仅供您个人使用,那也许没问题.
对于更一般的使用,先前给出的答案对我来说很好.也就是说,要么定义一个静态的"我不能显示这个"消息:
instance Show (IORef a) where
show _ = "<ioref>"
Run Code Online (Sandbox Code Playgroud)
这会给出类似的东西:
> runFunc
MyStruct <ioref> 4 "string val"
Run Code Online (Sandbox Code Playgroud)
或使用自定义功能.我建议创建一个类并解除所有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
Run Code Online (Sandbox Code Playgroud)
给出输出(未经测试,这只是手写):
> myFunc >>= showIO
MyStruct "My String in an IORef" 4 "string val"
Run Code Online (Sandbox Code Playgroud)