当使用 -Wall
选项编译 Haskell 应用程序时,GHC 会抱怨孤立的实例,例如:
Publisher.hs:45:9:
Warning: orphan instance: instance ToSElem Result
类型类 ToSElem
不是我的,它是由 HStringTemplate定义的。
现在我知道如何修复这个问题(将实例声明移动到其中声明 Result 的模块中) ,我也知道 为什么 GHC 倾向于避免孤立实例,但我仍然相信我的方法更好。我不在乎编译器是否不方便-而不是我。
之所以要在 Publisher 模块中声明我的 ToSElem
实例,是因为它是依赖于 HStringTemplate 的 Publisher 模块,而不是其他模块。我试图维护一个关注点分离,避免让每个模块都依赖于 HStringTemplate。
我认为 Haskell 的类型类的一个优点,例如与 Java 的接口相比,是它们是开放的而不是关闭的,因此实例不必在与数据类型相同的位置声明。GHC 的建议似乎是忽略这一点。
所以,我要寻找的是一些验证,我的想法是正确的,我会忽略/压制这个警告,或者一个更有说服力的论点,反对我的做事方式。