Ответ 1
GHC имеет расширение StandaloneDeriving
, с этим вы можете
{-# LANGUAGE StandaloneDeriving #-}
import MoneyModule
deriving instance Read Money
выводить экземпляры для многих классов.
В Haskell при определении типа данных вы можете автоматически выбирать в некоторых случаях, но могу ли я отложить автоматическое получение, возможно, даже положить его в другая библиотека?
Вот пример:
Автоматическое выведение в Haskell - это экономия в реальном времени!
module MoneyModule where
data Money = Money Int
deriving Show
Теперь я хочу использовать MoneyModule
, но мне также нужен экземпляр Read
для Money
:
module ExternalModule where
instance Read Money where
read = error "Can't this be done automatically instead?"
Но я бы предпочел, чтобы он был получен автоматически, и я знаю, что ghc мог бы сделать, если бы только автор MoneyModule автоматически создал экземпляр Read
.
Я знаю, что:
MoneyModule
, исправив ее отсутствующим экземпляром.В моем случае я не могу следовать лучшим методам, поскольку класс типа не связан к типу данных. Я сомневаюсь, что модуль класса типа или модуль типа данных хочет удерживать экземпляр, поэтому я создаю третью библиотеку, потому что в некоторых приложениям требуется объявление экземпляра.
GHC имеет расширение StandaloneDeriving
, с этим вы можете
{-# LANGUAGE StandaloneDeriving #-}
import MoneyModule
deriving instance Read Money
выводить экземпляры для многих классов.
Чтобы решить проблему автономного вывода, см. решение даниэлей. Но, как вы упомянули в своем вопросе, сироты не являются лучшей практикой, и ghc будет генерировать предупреждения. Чтобы подавить предупреждения сиротских сирот, вы можете использовать флаг -fno-warn-orphans
. Вы также можете добавить его в свой файл cabal:
...
library
exposed-modules: ...
...
ghc-options: -fno-warn-orphans
...