这是一个非常非常长的故事,我不会让你感到厌倦,但基本上,我设法让自己处于一种需要能够打印Either String (IO String)
类型的状态。任何帮助?如何打印类型(任何字符串(IO字符串))?
回答
的解决方案是一个内衬....
either print (print =<<)
如果要划分是否是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 ++ ")")
,它应该解决并打印值。
编辑 -
我已经被证明是错误的@luqui,:),这是很酷,因为我学到了一些东西....
当然现在我需要去一个继续进一步,并用适当的左和右标号表示一行。 :)
either (print . ("Left " ++)) ((print =<<) . fmap ("Right IO " ++))
更简洁的一个班轮将是:''sequenceA> => print'' – 2014-10-05 18:37:13
@ scrambledeggs- mind = blown :) – jamshidh 2014-10-05 18:50:30
- 1. IO字符串和IO数据类型
- 2. 如何打印出字符串索引字符串中字符串的字符
- 3. 打印围棋类型忽略“字符串()字符串”方法
- 4. 如何打印字典字符串
- 5. 打印字符串
- 6. 打印字符串
- 7. 如何在另一个字符串之后打印字符串?
- 8. Coverting打字稿字符串文字类型为字符串
- 9. 如何打印出字符串类型的typedef项目?
- 10. 如何打印TimeField - 类型错误:字符串格式化
- 11. Haskell的IO(字符串)和字符串
- 12. 转换字符串[字符串:任何]
- 13. 如何在字符串前后打印字符串然后将新字符串添加到旧字符串中?
- 14. Bash:如何打印字符串/ *
- 15. 如何打印长字符串成#
- 16. 如何打印字符串的开头?
- 17. 如何打印字符串C++ MFC
- 18. 如何打印出一个字符串
- 19. 如何将字符串打印为ListView
- 20. 如何打印不匹配字符串
- 21. 如何打印此字符串
- 22. 如何在JTextField上打印字符串
- 23. 如何打印宽字符串?
- 24. 如何打印v字符串?
- 25. 如何打印字符串的标签
- 26. 如何在Matlab中打印字符串?
- 27. PHP,如何打印新行字符串
- 28. C++如何向后打印字符串?
- 29. 如何打印子字符串?
- 30. erlang如何打印unicode字符串?
为了避免在将来出现这种情况,我建议阅读[这个答案](http://stackoverflow.com/questions/13134825/how-do-functors-work-in-haskell/13137359#13137359)我写了关于Functor的内容,包括“fmap适用于任何东西”和“在IO上使用fmap特别酷”的章节。 – AndrewC 2014-09-26 09:59:46