の Eq (および show) のインスタンスを自動的に導出する方法はありますPower
か? http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/deriving.htmlを見つけることができましたが、以下のコードに関連する説明を見つけることができませんでした。
さらに、以下で作成されたエフェクトのより良いプラクティスがあれば、私は haskell と関数型プログラミングが初めてなので、提案をお待ちしています。
{-# LANGUAGE ExistentialQuantification #-}
class Country a
instance Country CountrySet1
data CountrySet1 =
Belgium |
Algeria
deriving (Show)
data Power =
forall a. Country a => Power a |
Netural |
Water
deriving (Eq, Show)
編集: これは一種のハックであることは知っていますが、ほとんどすべて prelude 関数で行われるため、完全に悪意のあるコードがない限り、正しい結果が得られるはずです (これは、「オープンワールドの仮定」の場合に最もよくあるケースです)。 .
class Country a where
show :: a -> String
instance Country CountrySet1 where
show a = Prelude.show a
data CountrySet1 =
England |
Turkey
deriving (Show)
data Power =
forall a. Country a => Power a |
Netural |
Water
instance Show Power where
show (Power b) = "Power" ++ Main.show b
show (Netural) = "Netural"
show (Water) = "Water"
instance Eq Power where
(==) a b = Prelude.show a == Prelude.show b