При компиляции моего приложения Haskell с опцией -Wall
GHC жалуется на потерянные экземпляры, например:
Publisher.hs:45:9:
Warning: orphan instance: instance ToSElem Result
Тип класса ToSElem
не является моим, он определяется HStringTemplate.
Теперь я знаю, как это исправить (переместите объявление экземпляра в модуль, где объявлен результат), и я знаю почему GHC предпочитает избегать сиротских экземпляров, но я все еще считаю, что мой путь лучше. Меня не волнует, неудобен ли компилятор - скорее, чем я.
Я хочу объявить свои экземпляры ToSElem
в модуле Publisher, потому что это модуль Publisher, который зависит от HStringTemplate, а не от других модулей. Я стараюсь поддерживать разделение проблем и избегать того, чтобы каждый модуль зависел от HStringTemplate.
Я думал, что одним из преимуществ классов типа Haskell, сравниваемых, например, с интерфейсами Java, является то, что они открыты, а не закрыты, и поэтому экземпляры не должны быть объявлены в том же месте, что и тип данных. Совет GHC, похоже, должен игнорировать это.
Итак, я ищу либо какую-то проверку, что мое мышление звучит, и что я был бы оправдан игнорированием/подавлением этого предупреждения или более убедительным аргументом против того, чтобы делать что-то по-моему.