将ShowS转换为String的最佳方法?

时间:2017-07-09 18:51:50

标签: haskell

如何美化

(displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak) ""

为什么我不能

show $ displayS $ renderPretty 0.8 80 $ _errDoc ei <> linebreak

1 个答案:

答案 0 :(得分:3)

您不能show $ displayS blah,因为ShowS不是Show的实例。回想一下

type ShowS = String -> String

所以如果我们想要一个Show的实例,我们就得写:

instance Show (String -> String) where
    show f = ...

现在我们遇到了一些问题。毕竟,我们对函数f唯一能做的就是用String参数调用它。有几个选择很容易让人想起,但它们都有缺点:

  1. 尝试描述f对每个可能输入的行为。这不会很好 - 有无数的输入。阅读和理解无限输出需要很长时间。
  2. 根本不打扰致电f。选择一个String作为show的输出,与show f = "<it's a function, lol>"中一样。这不是非常有用,因为它实际上并没有为您提供有关f
  3. 的任何信息
  4. 使用尊重字符串f调用""。这没有用,因为有许多不同的函数为该输入提供相同的输出,并且您将无法区分它们。 (也许碰巧你的库用于烹饪ShowS值不会有这个问题,但是如果我们要有实例它应该适用于来自任何地方的值,而不仅仅是一些小子集价值观!)
  5. 由于这些考虑因素,标准库中不包含函数Show的实例,但可以从Hackage安装方法(1)和(2)。