Scala: Tipos abstratos vs genéricos

Eu estava lendo A Tour of Scala: Abstract Types . Quando é melhor usar tipos abstratos? Por exemplo, abstract class Buffer { type T val element: T } em vez disso, genéricos, por exemplo, abstract class Buffer[T] { val element: