Scala: Typy abstrakcyjne a generyczne

Czytałem A Tour of Scala: Abstract Types . Kiedy lepiej używać typów abstrakcyjnych? Na przykład, abstract class Buffer { type T val element: T } raczej że generyczne, na przykład abstract class Buffer[T] { val element: