如果函数作为Show类型类的实例

时间:2013-11-27 18:21:16

标签: haskell functional-programming

函数不是Show类型类的实例,因此无法以整洁的形式看到它。但编译器在它返回的某个地方失败了。

那么为什么不能展示它以及它是什么样子呢?  如果你能用一些微不足道的例子说明这一点,我将感激不尽。

2 个答案:

答案 0 :(得分:5)

Haskell是一种编译语言。函数在内部只是代码。对Show他们来说没有任何意义。即使有可能,它也可能不合适,因为它很可能意味着扩展相等的函数具有不同的String表示,和/或编译器优化将在String中可见正在生成。

您可以做的唯一事情是:为所有函数定义虚拟表示,或者为具有小域(例如,类型为Bool -> BoolBool -> Int的函数)的特定函数类型定义特定实例仍然可以很容易地从外面观察到。

答案 1 :(得分:2)

无法检查函数以获取其代码和任何捕获的环境(如果是thunk)。

为了show一个函数,通常会尝试创建Show的实例:

instance Show (a -> b) where
    show f = 

=的右侧有什么价值?正如我所说,你不能检查功能,所以常见的解决方案是使用:

    show f = "<function>"

Text.Show.Functions

中实施的内容