我为自己的数据类型定义了一个NumericPrelude Ring
实例,但未能定义one
or fromInteger
。当我编译程序时,我没有收到任何警告,因为Ring
该类具有默认的相互递归实现one
和fromInteger
。结果:一个很难找到的堆栈溢出。(确实,当使用 -XRebindableSyntax 时,fromInteger
on 数字常量不需要显式,因此很难找出fromInteger
堆栈溢出的罪魁祸首。)
开发人员有没有办法注释类以指示最小的完整定义?如果 GHC 可以对不符合此定义的实例发出警告,同时允许一整套默认实现,那将非常有帮助。如果不是,这里公认的做法是什么?开发人员应该保留(a?)没有默认值的最小方法集,以便引发适当的警告,还是我们依赖用户使用 RTFM?