data Fire = Burn | Ember
data Water = Bubble | WaterGun
class Elements a
instance Elements Fire
instance Elements Water
data Elemental = Elemental { name :: String,
move :: (Elements a) => a
}
getMove :: (Elements b) => String -> b
getMove x = read x :: (Elements a) => a
getMove :: (Elements b) => String -> b
getMove "Burn" = Burn
getMove "Ember" = Ember
getMove "Bubble" = Bubble
getMove "WaterGun" = WaterGun
getMove _ = error "Unknown move!"
3 :: (Num a) => a
will work but Burn :: (Elements a) => a
causes an ambiguity error. Why is this the case?