Haskell中是否有漂亮的打印(或显示)抽象?

时间:2015-09-11 21:49:27

标签: haskell printing pretty-print

是否没有标准的方法来打印最终用户消费的价值?考虑到围绕其使用的约定以及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

请注意,我并没有要求提供精心设计的漂亮打印和格式化功能的东西(我看到几个这样做的包)只是为了一个广泛使用的简单抽象,允许漂亮的打印。有这样的事吗?

2 个答案:

答案 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进行漂亮打印。

整个类型类似乎比你要求的要复杂一些,但也许它有帮助