я не мог сделать следующую компиляцию:ограничение класса в определении любезных данных
class Typeable f => Foo f where
data Bar :: Typeable
Другими словами, я хотел бы определить класс Foo
, которые имеют соответствующий тип, который должен быть экземпляром Typeable
.
Похоже, я могу определить то же самое с FunctionalDependencies
:
class (Typeable b,Typeable f) => Foo f b | f -> b where
Так как я могу сделать то же самое с TypeFamilies
?
ли вы имеете в виду ассоциативный тип или связанные с ним данные? Разница довольно фундаментальна, и этот вопрос имеет больший смысл, если вы имеете в виду ассоциированный тип. То есть 'type Bar ...' в определении класса. Сравнение с fundeps просто не работает со связанными данными. – Carl
Фактическое требование больше похоже на связанные данные, так как 'Bar' будет определяться одновременно с экземпляром' Foo'. –