Scalaでクラスをsealedにする理由とは？


[`scala.collection.mutable.TreeMap`](http://www.scala-
lang.org/api/current/scala/collection/mutable/TreeMap.html)がsealedで、その他の`Map`(例えば[`HashMap`](http://www.scala-
lang.org/api/current/scala/collection/mutable/HashMap.html))がそうでないのは何故でしょうか？(さらに言えば、immutableな[`TreeMap`](http://www.scala-
lang.org/api/current/scala/collection/immutable/TreeMap.html)はfinal、[`HashMap`](http://www.scala-
lang.org/api/current/scala/collection/immutable/HashMap.html)はsealedになっており、修飾子をつける基準が見いだせませんでした。)

Scalaでsealedなクラスを使うのは、case
classと組み合わせてパターンマッチの漏れをコンパイラが検出できるようにするためだと思っていたのですが、それ以外に理由はあるのでしょうか？




継承して拡張することは防ぎたいけれど、finalにすると[`rangeImpl`](http://www.scala-
lang.org/api/current/scala/collection/mutable/TreeMap.html#rangeImpl\(from:Option\[A\],until:Option\[A\]\):scala.collection.mutable.TreeMap\[A,B\])などでTreeMapを継承したクラスを返すことが出来ないという実装詳細ではないかと思います。

