Vorrei utilizzare haskell per implementare un gioco e vorrei utilizzare un sistema di classi di tipi per implementare il sistema di articoli. Avrebbe funzionato o meno così:Ispezione Haskell Typeclass
data Wood = Wood Int
instance Item Wood where
image a = "wood.png"
displayName a = "Wood"
instance Flammable Wood where
burn (Wood health) | health' <= 0 = Ash
| otherwise = Wood health'
where health' = health - 100
dove la voce e le classi infiammabili sono qualcosa di simile:
class Item a where
image :: a -> String
displayName :: a -> String
class Flammable a where
burn :: (Item b) => a -> b
Per fare questo, avrei bisogno di un modo per rilevare se un valore è un'istanza di una classe di tipo.
Il modulo Data.Data offre una funzionalità simile che mi consente di credere che ciò sia possibile.
Non sono sicuro che quello che stai facendo si inserisca nel modello di Haskell. Che un valore sia un'istanza di una classe di tipo dovrebbe essere dimostrabile staticamente. – millimoose
I valori non possono essere istanze di classi di tipi. I tipi sono istanze di classi di tipi. –
Vedere [questa domanda frequente] (http://www.haskell.org/haskellwiki/FAQ#I.27m_making_an_RPG._Should_I_define_a_type_for_each_kind_of_monster.2C_and_a_type_class_for_them.3F). – ehird