如何打印类型(字符串(IO字符串))?

时间:2014-09-26 03:00:04

标签: haskell functional-programming

这是一个非常非常长的故事,我不会厌烦你,但基本上,我设法让自己处于一种我需要能够打印Either String (IO String)类型的情况。有什么帮助吗?

2 个答案:

答案 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}}