如何美化
(displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak) ""
为什么我不能
show $ displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak
答案 0 :(得分:3)
您不能show $ displayS blah
,因为ShowS
不是Show
的实例。回想一下
type ShowS = String -> String
所以如果我们想要一个Show
的实例,我们就得写:
instance Show (String -> String) where
show f = ...
现在我们遇到了一些问题。毕竟,我们对函数f
唯一能做的就是用String
参数调用它。有几个选择很容易让人想起,但它们都有缺点:
f
对每个可能输入的行为。这不会很好 - 有无数的输入。阅读和理解无限输出需要很长时间。f
。选择一个String
作为show
的输出,与show f = "<it's a function, lol>"
中一样。这不是非常有用,因为它实际上并没有为您提供有关f
。f
调用""
。这没有用,因为有许多不同的函数为该输入提供相同的输出,并且您将无法区分它们。 (也许碰巧你的库用于烹饪ShowS
值不会有这个问题,但是如果我们要有实例它应该适用于来自任何地方的值,而不仅仅是一些小子集价值观!)由于这些考虑因素,标准库中不包含函数Show
的实例,但可以从Hackage安装方法(1)和(2)。