为什么GHC不会在闭类型族上自动添加注入性标注(前提是实例与之不冲突)?

编程语言 2026-07-10

由于闭合型族的所有子句都一起出现,因此不能通过添加其他子句来扩展;而且GHC无论如何都能检测到注入性标注的违规(甚至对于打开的型族,实际上也是如此),我在想原则上如果提供的实例与之不冲突,GHC是否可以为闭合型族添加注入性标注。

我假设即使答案是GHC可以做到,但这样的特性也没有存在的必要,因为它只是少写一点代码却没有带来实际好处。但是仅仅如此吗?还是说有理由认为让GHC添加注入性标注会是一个坏主意?

解决方案

其实这个问题在 The Haskell Unfolder Episode 3: injectivity 的访谈中就被问到,恰好出现在时间点 30:12Andres Löh 给出了如下回答

我认为GHC可以做到,但GHC现在并没有……即便是对闭合型族,你也可能在某个时点回头修改定义或添加新子句;如果你依赖它的注入性而没有以那种方式声明,你的程序可能会在完全不同的地方出错……因此让GHC不对其进行推断是有道理的,尽管它理论上可能做到。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章