Haskell - 任何关于`derived`实例的关闭可重新绑定语法的方法吗?

gat*_*ado 6 syntax haskell typeclass deriving

有一个恼人的"功能",派生实例也受RebindableSyntax扩展影响.我想写的例子:

{-# LANGUAGE RebindableSyntax #-}
import qualified Prelude
data Color = Red | Green | Blue | Periwinkle | Fuschia deriving (Prelude.Eq, Prelude.Ord)
Run Code Online (Sandbox Code Playgroud)

这会出现错误"不在范围内:`ifThenElse'".

C. *_*ann 7

这对我来说似乎是一种错误 - deriving无论如何,该子句充满了内置魔法,因此我怀疑使用反弹语法的派生实例在实践中是有用的.现在,如果你也可以重新绑定deriving条款本身并使用TH拼接,而不是...但我离题.

我怀疑最简单和最简单的解决方案是使用不同的模块.将数据类型定义放在自己的模块中,在其中使用deriving带有Prelude函数的子句,然后使用可重新绑定的语法在模块中导入类型.如果模块中需要进一步的模块化,请注意StandaloneDeriving也存在,并允许您在一个模块中定义类型(使用RebindableSyntax活动),在另一个模块中导出实例(不带RebindableSyntax),并从实际使用该类型的模块导入.