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