Возможно ли, чтобы тип был частью класса? Что-то вроде:
class KeyTraits v where
keyType :: *
key :: v -> keyType
data TableRow = { date :: Date, metaData :: String, value :: Int }
instance KeyTraits TableRow where
keyType = Date
key = date
И могут ли эти функции типа "типа" использоваться в другом месте? Например:
-- automatically deduce the type for the key, from the value type, using
-- the typeclass
data MyMap v = { getMap :: (KeyTraits v) => Map (keyType) v }
Я могу делать что-то совершенно неправильное, но я в основном хочу, чтобы определить отношения типа, такие как выше (например, некоторые значения уже могут иметь данные, которые можно использовать в качестве ключа). Если это невозможно или сложно, можете ли вы предложить лучший дизайн, более идиоматический?
Спасибо!