这是一个非常非常长的故事,我不会厌烦你,但基本上,我设法让自己处于一种我需要能够打印Either String (IO String)
类型的情况。有什么帮助吗?
答案 0 :(得分:13)
解决方案是单线......
either print (print =<<)
如果你想界定它是Left
还是Right
它更多涉及,请参阅@ jamsihdh的回答。
请注意,这不能成为Show
个实例,因为对于IO a
类型的值没有任何内容可以纯粹观察到。
答案 1 :(得分:7)
解决方案不是单线......
IO
monad不是Show
的实例,因此您不能只使用print
。实际上,必须首先获得IO monad中的值。
您可以将x::Either String (IO String)
放在主....
case x of
Left s -> putStrLn ("Left " ++ show s)
Right getVal -> do
s <- getVal
putStrLn ("Right (IO " ++ show s ++ ")")
的值
either (print . ("Left " ++)) ((print =<<) . fmap ("Right IO " ++))
它应该解析并打印该值。
编辑 -
我被@luqui,:)证明是错的,这很酷,因为我学到了东西....
当然,现在我需要更进一步,推出一个具有相应左右标识的单线。 :)
{{1}}