und*_*all 3 haskell functional-programming
这是一个非常非常长的故事,我不会厌倦你,但基本上,我设法让自己处于一种我需要能够打印这种类型的情况Either String (IO String).有帮助吗?
luq*_*qui 13
解决方案是单线...
either print (print =<<)
Run Code Online (Sandbox Code Playgroud)
如果你想界定它是否Left或Right涉及更多,请参阅@ jamsihdh的答案.
请注意,这不能成为一个Show实例,因为关于类型的值没有任何内容可以纯粹观察到IO a.
解决方案不是一个班轮....
该IO单子不是一个实例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 ++ ")")
Run Code Online (Sandbox Code Playgroud)
它应解决并打印该值.
编辑-
我被@luqui,:)证明是错的,这很酷,因为我学到了一些东西....
当然,现在我需要更进一步,推出一个具有相应左右标识的单线程.:)
either (print . ("Left " ++)) ((print =<<) . fmap ("Right IO " ++))
Run Code Online (Sandbox Code Playgroud)