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'".
这对我来说似乎是一种错误 - deriving
无论如何,该子句充满了内置魔法,因此我怀疑使用反弹语法的派生实例在实践中是有用的.现在,如果你也可以重新绑定deriving
条款本身并使用TH拼接,而不是...但我离题.
我怀疑最简单和最简单的解决方案是使用不同的模块.将数据类型定义放在自己的模块中,在其中使用deriving
带有Prelude函数的子句,然后使用可重新绑定的语法在模块中导入类型.如果模块中需要进一步的模块化,请注意StandaloneDeriving
也存在,并允许您在一个模块中定义类型(使用RebindableSyntax
活动),在另一个模块中导出实例(不带RebindableSyntax
),并从实际使用该类型的模块导入.