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

时间:2012-01-26 20:27:59

标签: haskell syntax typeclass deriving

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

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

这会出现错误“不在范围内:`ifThenElse'”。

1 个答案:

答案 0 :(得分:7)

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

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