Mensaje de error incomprensible con familias de tipos

Estoy tratando de entender las familias tipográficas sin mucho éxito. Aquí hay un ejemplo 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)

La intención es bastante transparente, creo (tratando de definir una categoría de producto).

Esto me da:

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

He intentado agregar firmas de tipo:

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

Pero esto solo empeora las cosas.

La siguiente modificación 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')

Pero no me gusta el argumento superfluo paraunit.

¿Es posible definir el argumento menos?unit?

Respuestas a la pregunta(2)

Su respuesta a la pregunta