Алгебраические типы данных Haskell: «псевдорасширение»

Я изучаю алгебраические DT в Haskell. Что я хотел бы сделать, так это создать новый ADT, который как бы «расширяет» существующий. Я не могу найти, как выразить то, что я хотел бы, может ли кто-нибудь предложить альтернативный шаблон или предложить решение. Я хочу, чтобы они были разными типами, но копирование и вставка только швов кажется глупым решением. Код ниже лучше всего описывает то, что я ищу.

data Power =
  Abkhazia |
  -- A whole bunch of World powers and semi-powers
  Transnistria
    deriving (Eq, Show)

data Country = 
  --Everything in Power | 
  Netural |
  Water
    deriving (Eq, Show)

Редактировать: я думаю, что нужно небольшое пояснение... Я хочу иметь возможность сделать это (в ghci)

let a = Abkhazia :: Country

, а не

let a = Power Abkhazia :: Country
5
задан Ra is dead 17 June 2012 в 18:30
поделиться