Можно ли указать, что каждый член datakind удовлетворяет классу типов, так что подразумевается ограничение класса? Например.Typeclass, созданный при каждом значении типа данных
data AB = A | B
class Foo (a :: AB) where get :: proxy a -> String
instance Foo A where get _ = "A"
instance Foo B where get _ = "B"
-- note lack of constraint here
get' :: proxy (a :: AB) -> String
get' = get
В основном a
является AB
поэтому мы уверены, что есть экземпляр Foo
для него. Я нахожу это маловероятным - где он собирается получить словарь Foo
? - но я видел волшебство в свое время.
Я закрыл это как дубликат http://stackoverflow.com/questions/32408110/datakinds-and-type-class-instances, но вновь его. Отдельный класс 'Foo', ограниченный работой только с' AB', может оставить место для магии, я не могу себе представить. – Cirdec