这是一个非常长的故事,我不想让你感到无聊,但基本上我发现自己需要打印类型Either String(IO String)
。有什么帮助吗?
这是一个非常长的故事,我不想让你感到无聊,但基本上我发现自己需要打印类型Either String(IO String)
。有什么帮助吗?
这个解决方案只需要一行代码。
either print (print =<<)
如果您想划分它是Left
还是Right
,需要更多的操作,请参见@jamsihdh的答案。
请注意,无法将其制作为Show
实例,因为对于IO a
类型的值无法纯粹地进行观察。
这个问题的解决方案不是一句话能概括...
IO
函子不是 Show
类的实例,所以你不能直接使用 print
。实际上,首先必须获取IO函子中的值。
您可以通过将以下内容放入您的主函数来查看 x::Either String (IO String)
的值...
case x of
Left s -> putStrLn ("Left " ++ show s)
Right getVal -> do
s <- getVal
putStrLn ("Right (IO " ++ show s ++ ")")
它应该解决并打印值。
编辑-
@luqui证明了我是错的 :), 这很酷,因为我学到了一些东西...
当然现在我需要更进一步,用适当的左右指定放出一个单行程序。:)
either (print . ("Left " ++)) ((print =<<) . fmap ("Right IO " ++))