Derivando instâncias de classe de tipo para classes de caso com exatamente um campo

Estou trabalhando em uma biblioteca de análise CSV (tabular) Ele usa classes de tipo simples para codificação / decodificação: a codificação, por exemplo, é feita com instâncias deCellEncoder (para codificar uma única célula) eRowEncoder (para codificar linhas inteiras).

Usando informe, achei bastante simples derivar automaticamente as seguintes instâncias de classe de tipo:

RowEncoder[A] E seA é uma classe de caso cujos campos têm todos umCellEncoder.RowEncoder[A] E seA é um ADT cujas alternativas todas têm umRowEncoder.CellEncoder[A] E seA é um ADT cujas alternativas todas têm umCellEncoder.

O fato é que esse último acaba sendo quase totalmente inútil em situações da vida real: as alternativas de um ADT são quase sempre classes de casos, e não posso derivar umaCellEncoder para uma classe de caso que possui mais de um campo.

O que eu gostaria de fazer, no entanto, é derivar umaCellEncoder para classes de caso que possuem um único campo cujo tipo possui umCellEncoder. Isso cobriria, por exemplo,Eitherescalaz\/, gatos'Xor...

Isto é o que eu tenho até agora:

implicit def caseClass1CellEncoder[A, H](implicit gen: Generic.Aux[A, H :: HNil], c: CellEncoder[H]): CellEncoder[A] =
    CellEncoder((a: A) => gen.to(a) match {
      case h :: t => c.encode(h)
    })

Isso funciona bem quando usado explicitamente:

case class Bar(xs: String)
caseClass1CellEncoder[Bar, String]
res0: tabulate.CellEncoder[Bar] = tabulate.CellEncoder$$anon$2@7941904b

No entanto, não consigo fazê-lo funcionar implicitamente, o seguinte falha:

implicitly[CellEncoder[Bar]]
>> could not find implicit value for parameter e: tabulate.CellEncoder[Test.this.Bar]

Eu também tentei o seguinte, sem mais sucesso:

implicit def testEncoder[A, H, R <: H :: HNil](implicit gen: Generic.Aux[A, R], c: CellEncoder[H]): CellEncoder[A] =
      CellEncoder((a: A) => gen.to(a) match {
        case h :: t => c.encode(h)
      })

Estou esquecendo de algo? O que estou tentando fazer é possível?