我为我自己的数据类型定义了一个NumericPreludeRing
实例,但未能定义one
或fromInteger
。当我编译程序时,我没有收到任何警告,因为Ring
类具有相互递归的实现one
和fromInteger
。结果是:很难找到堆栈溢出。 (事实上,使用-XRebindableSyntax的fromInteger
的数字常数时不必明确的,所以这是非常难以弄清楚fromInteger
是堆栈溢出的元凶。)Haskell的最小完整定义注释
有没有办法为开发商注释类表示一个最小的完整定义?如果GHC可以对不符合该定义的实例发出警告,同时允许一组完整的默认实现,那将会非常有用。如果不是,这里公认的做法是什么?开发者是否应该在没有默认值的情况下离开(a?)最少的一组方法,以便引发适当的警告,或者我们是否依赖用户使用RTFM?