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