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