是否没有标准的方法来打印最终用户消费的价值?考虑到围绕其使用的约定以及Show
的约束,read (show x) == x
显然更多是调试方便而不是为此目的而工作的东西。
例如,至少有一个像
这样的简单包class (Show a) => PShow a where
pshow :: a -> String
pshow = show
pprint :: (PShow a) => a -> IO ()
pprint = putStrLn . pshow
其中实例执行类似
的操作instance PShow MyType where
pshow a = someUserFriendlyStringOf a
请注意,我并没有要求提供精心设计的漂亮打印和格式化功能的东西(我看到几个这样做的包)只是为了一个广泛使用的简单抽象,允许漂亮的打印。有这样的事吗?
答案 0 :(得分:2)
请注意,我并没有要求提供精心设计的漂亮打印和格式化功能的东西(我看到有几个这样做的软件包)
有一个原因。编写这些精心设计的图书馆的人之所以这样做,是因为他们无法通过简单的事情完成工作。您已经通过提供两种不同的方法暗示了一些复杂性,这些方法可能不会做同样的事情,没有指导何时使用。
从积极的方面来说,我不会过分关注read
。专注于Show
实例(可能具有GHC扩展名)可以为您提供剪切和粘贴到程序中的代码。
答案 1 :(得分:2)
我刚刚对a -> String
进行了Hoogle搜索,找到了Language.Haskell.Pretty模块。
该模块定义了三个简单的函数:
prettyPrintStyleMode :: Pretty a =>风格 - > PPHsMode - > a - >字符串
具有给定风格和模式的漂亮印刷。prettyPrintWithMode :: Pretty a => PPHsMode - > a - >字符串
使用默认样式和给定模式进行漂亮打印。prettyPrint ::漂亮a => a - >字符串
使用默认样式和defaultMode进行漂亮打印。
整个类型类似乎比你要求的要复杂一些,但也许它有帮助