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

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

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

最佳答案

在我看来,这似乎是一个错误的功能-deriving子句无论如何都充满了内置的魔术,因此我怀疑使用反弹语法的派生实例在实践中是否有用。现在,如果您还可以重新绑定(bind)deriving子句本身,而改用TH接头...但是我离题了。

我怀疑最简单,最简单的解决方案是使用不同的模块。将数据类型定义放在其自己的模块中,在其中将deriving子句与Prelude函数一起使用,然后使用可重语法将其导入模块中。如果您需要在模块中进一步模块化,请注意StandaloneDeriving也存在,可以让您在一个模块中定义类型(激活RebindableSyntax),在另一个模块中派生实例(不使用RebindableSyntax),并从实际使用的模块中导入两者类型。

10-08 12:42