Can you put this in a separate file and call it: AdaptiveMatrix[V] and remove the implicit monoid from the constructor?

You can add a companion object:

object AdaptiveMatrix {
  def empty[V](rows: Int, cols: Int): AdaptiveMatrix[V]
  implicit def monoid[V:Monoid]: Monoid[AdaptiveMatrix[V]] = {
    // put the stuff here with the recursive AdaptiveVector wrapped in this type.
  }
}