Sto imparando a conoscere i DT algebrici in haskell. Quello che mi piacerebbe fare è creare un nuovo ADT che "estenda" uno esistente. Non riesco a trovare come esprimere ciò che vorrei, qualcuno può suggerire un modello alternativo o suggerire una soluzione. Voglio che siano tipi distinti, ma copiare e incollare solo le giunture come una soluzione sciocca. Il codice seguente descrive meglio quello che sto cercando.Tipi di dati algebrici di Haskell: "pseudo-estensione"
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)
Edit: Credo che hanno bisogno di un piccolo chiarimento ... Voglio essere in grado di fare questo (in ghci)
let a = Abkhazia :: Country
e non
let a = Power Abkhazia :: Country
I motivi per cui voglio farlo solitamente provengono da una scuola di pensiero OO-y ;-), ma puoi sempre aggiungere un costruttore all'interno di Country per PowerCountry che detiene un potere. –
Hmm posso chiedere come Abkhazia e Transnistria entrano in un pezzo di codice Haskell? Come sei collegato a quei due posti? Stai lavorando ad una sorta di gioco? Da quale paese vieni? –
Abkhazia e Transnistria sono i primi e gli ultimi nell'elenco di "Altri stati" su http://en.wikipedia.org/wiki/List_of_sovereign_states Sto solo imparando Haskell e ho trovato qualcosa da praticare. Immagino che potrebbe essere un gioco, ma non ho ancora intenzione. –