Когда у меня есть такой код:
class C where
type T t1 t2
...
instance C (X t) where
type T (X t) (t a b) = a
...
Получаю ошибку (с головой GHC):
• Polymorphic type indexes of associated type ‘T’
(i.e. ones independent of the class type variables)
must be distinct type variables
Предположительно это связано с тем, что (t a b)
не является простой переменной, как предполагает ошибка.
Но я могу просто реорганизовать код следующим образом:
type family T t1 t2
class C where
...
type instance T (X t) (t a b) = a
instance C (X t) where
....
А то теперь вроде все нормально работает.
Из-за немного более запутанного синтаксиса, теряю ли я что-нибудь, извлекая определения семейств типов из классов, или определения внутри класса являются просто синтаксическим сахаром, поэтому их удаление является относительно бесплатным обходным решением?
class C
? Я думаю, это может быть важно. - person chi   schedule 21.07.2016