"zonk" 的 GHC 源代码是什么意思?

What does the GHC source mean by "zonk"?

我正在为 GHC 开发一个插件,所以我正在阅读它的一些实现的文档。

动词 "to zonk" 随处可见,但我无法找到对 zonk 或(广义上)人们可能想要的意思的解释。我可以找到很多关于复杂情况的注释,在这些情况下有必要对某些东西进行 zonk 或不进行 zonk,但是对于大局是什么一无所知,我在跟踪时遇到了很多麻烦。

一个未分区的类型可以有类型变量,这些变量是在统一期间填充的可变引用(类型检查器大量使用这种可变性来提高性能)。 Zonking 遍历一个类型并将所有可变引用替换为它们取消引用的类型;因此,生成的结构是不可变的,不需要取消引用即可解释。

请注意,这些类型变量是-变量,即它们不对应于多态性引入的类型变量;相反,它们是要被真实类型替换的统一变量。替换的选择由类型checking/type推理过程决定,然后在zonking时进行实际替换。

这种 zonking 的概念自然地扩展到包含类型的类型检查器的其他中间表示。