Непонятное сообщение об ошибке с семействами типов

Я пытаюсь понять тип семьи без особого успеха. Вот'Это минимальный пример:

{-# LANGUAGE TypeFamilies #-}

class Object obj where
  type Unit obj :: *
  unit :: Unit obj

instance (Object obj, Object obj') => Object (obj, obj') where
  type Unit (obj, obj') = (Unit obj, Unit obj')
  unit = (unit, unit)

Я думаю, что цель довольно прозрачна (я пытаюсь определить категорию продукта).

Это дает мне:

objs.hs:10:10:
    Could not deduce (Unit obj' ~ Unit obj1)
    from the context (Object obj, Object obj')
      bound by the instance declaration at objs.hs:8:10-56
    NB: `Unit' is a type function, and may not be injective
    The type variable `obj1' is ambiguous
    Possible fix: add a type signature that fixes these type variable(s)
    Expected type: Unit (obj, obj')
      Actual type: (Unit obj0, Unit obj1)
    In the expression: (unit, unit)
    In an equation for `unit': unit = (unit, unit)
    In the instance declaration for `Object (obj, obj')'

Я попытался добавить тип подписей:

unit = (unit :: Unit obj, unit :: Unit obj') 

но это только усугубляет ситуацию.

Компилируется следующая модификация:

{-# LANGUAGE TypeFamilies #-}

class Object obj where
  type Unit obj :: *
  unit :: obj -> Unit obj

instance (Object obj, Object obj') => Object (obj, obj') where
  type Unit (obj, obj') = (Unit obj, Unit obj')
  unit (o, o') = (unit o, unit o')

но я неТ как лишний аргумент для.unit

Можно ли определить аргумент без?unit

Ответы на вопрос(2)

Ваш ответ на вопрос