函数不是Show类型类的实例,因此无法以整洁的形式看到它。但编译器在它返回的某个地方失败了。
那么为什么不能展示它以及它是什么样子呢? 如果你能用一些微不足道的例子说明这一点,我将感激不尽。
答案 0 :(得分:5)
Haskell是一种编译语言。函数在内部只是代码。对Show
他们来说没有任何意义。即使有可能,它也可能不合适,因为它很可能意味着扩展相等的函数具有不同的String
表示,和/或编译器优化将在String
中可见正在生成。
您可以做的唯一事情是:为所有函数定义虚拟表示,或者为具有小域(例如,类型为Bool -> Bool
或Bool -> Int
的函数)的特定函数类型定义特定实例仍然可以很容易地从外面观察到。
答案 1 :(得分:2)
无法检查函数以获取其代码和任何捕获的环境(如果是thunk)。
为了show
一个函数,通常会尝试创建Show
的实例:
instance Show (a -> b) where
show f =
=
的右侧有什么价值?正如我所说,你不能检查功能,所以常见的解决方案是使用:
show f = "<function>"
Text.Show.Functions