Scala método pulido que no puedo entender hasta ahora

Intento entender algunas obras de Slick y lo que requiere.

Aquí un ejemplo:

package models

case class Bar(id: Option[Int] = None, name: String)

object Bars extends Table[Bar]("bar") {
  def id = column[Int]("id", O.PrimaryKey, O.AutoInc)

  // This is the primary key column
  def name = column[String]("name")

  // Every table needs a * projection with the same type as the table's type parameter
  def * = id.? ~ name <>(Bar, Bar.unapply _)
}

¿Podría alguien explicarme cuál es el propósito de* metodo aqui, que es<>, por quéunapply? y qué es la proyección - método~'devuelve la instancia deProjection2?

Respuestas a la pregunta(2)

Su respuesta a la pregunta