6

派生インスタンスもRebindableSyntax拡張機能の影響を受けるという厄介な「機能」があります。私が書きたいものの例:

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

これにより、「 Not in scope: `ifThenElse' 」というエラーが発生します。

4

1 に答える 1

7

それは私には見当違いのように思えます.--deriving節はとにかく組み込みの魔法でいっぱいなので、リバウンド構文を使用した派生インスタンスが実際に役立つかどうかは懐疑的です。derivingさて、句自体を再バインドして、代わりに TH スプライスを使用することもできれば... しかし、私は脱線します。

最も簡単で簡単な解決策は、さまざまなモジュールを使用することだと思います。データ型の定義を独自のモジュールに配置し、derivingその節をスコープ内の Prelude 関数と共に使用してから、再バインド可能な構文を使用してモジュールに型をインポートします。モジュールにさらにモジュール性が必要な場合は、StandaloneDerivingも存在することに注意してください。これにより、1 つのモジュールで型を定義し ( RebindableSyntaxactive を使用)、別のモジュールでインスタンスを派生させ (を使用せずRebindableSyntax)、その型を実際に使用するモジュールから両方をインポートできます。

于 2012-01-26T20:43:38.853 に答える