Projeção mapeada com o objeto complementar em SLICK

Aninhava classes / objetos e queria armazená-los (e recuperá-los) em um banco de dados usando SLICK. Eu entendo que com a projeção mapeada SLICK seria a chave. Além disso, eu uso um objeto complementar para mapear entre objetos aninhados e estrutura plana (para ser armazenado na tabela de banco de dados). Eu quero fazer algo assim (exemplo simplificado):

case class Foo(id: Int, myBar: Bar)

case class Bar(myInt: Int, myString: String)

object Foo {
  def apply(id: Int, myInt: Int, myString: String): Foo = Foo(id, Bar(myInt, myString))

  override def unapply(f: Foo) = (f.id, f.myBar.myInt, f.myBar.myString)
}

object TTable extends Table[Foo]("FOO") {
    def id = column[Int]("id",  O.PrimaryKey)
    def myInt = column[Int]("myInt", O NotNull)
    def myString = column[String]("myString", O NotNull)

    def * = id ~ myInt ~ myString <> (Foo.apply _, Foo.unapply _)

    def query(db: Database, id: Int): Option[Foo] = db withSession { //s: Session =>
        (for { b <- TTable if b.id is id} yield b).firstOption
    }
}

Mas a compilação falha com vários erros: "método de aplicação é definido duas vezes", "referência ambígua à definição sobrecarregada, o método [...] aplica o tipo esperado de correspondência?" e "valor do método sobrecarregado <> com alternativas"

Eu encontrei esta excelente explicação da projeção mapeada "método scala escorregadio eu não consigo entender até agora"e"Projeção mapeada com <> para uma classe de caso com um objeto complementar no Slick"mas nenhuma das soluções sugeridas funciona para mim.

questionAnswers(1)

yourAnswerToTheQuestion