Это кажется мне ошибкой - предложение deriving
в любом случае полно встроенной магии, поэтому я скептически отношусь к тому, что производные экземпляры, использующие синтаксис отскока, будут полезны на практике. Теперь, если бы вы могли перепривязать само предложение deriving
и использовать вместо него соединение TH ... но я отвлекся.
Я подозреваю, что самое простое и простое решение - использовать разные модули. Поместите определение типа данных в его собственный модуль, используйте предложение deriving
там с функциями Prelude в области действия, затем импортируйте тип в модуле, используя синтаксис повторной привязки. Если вам нужна дополнительная модульность в ваших модулях, обратите внимание, что StandaloneDeriving
также существует и позволит вам определять типы в одном модуле (с активным RebindableSyntax
), извлекать экземпляры в другом модуле (без RebindableSyntax
) и импортировать оба из модулей, которые на самом деле используют тип.