Mensagem de erro incompreensível com famílias de tipos

Estou tentando entender famílias de tipos sem muito sucesso. Aqui está um exemplo mínimo:

{-# 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)

A intenção é bastante transparente, eu acho (tentando definir uma categoria de produto).

Isso me dá:

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')'

Eu tentei adicionar assinaturas de tipo:

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

mas isso só piora as coisas.

A seguinte modificação compila:

{-# 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')

mas eu não gosto do argumento supérfluo paraunit.

É possível definir o argumento-lessunit?

questionAnswers(2)

yourAnswerToTheQuestion