If函数作为Show类型类的实例



函数不是Show类型类的实例,所以不能以整洁的形式看到它。但编译器有它返回失败的地方。

那么,为什么不可能展示它,如果它能成为它的样子呢?如果你能举一些微不足道的例子来说明这一点,我将不胜感激。

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

你唯一能做的就是:为所有函数定义一个伪表示,或者为具有小域的特定函数类型(比如Bool -> BoolBool -> Int类型的函数)定义一个特定实例,这些域仍然可以很容易地从外部完全观察到。

没有办法检查函数以获取其代码和任何捕获的环境(在thunk的情况下)。

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

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

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

    show f = "<function>"

这是Text.Show.Functions 中实现的

最新更新