読者です 読者をやめる 読者になる 読者になる

判別共用体 (バリアント) は視覚的にわかりやすくていい感じ

という話を Scala 座の懇親会会場に行くエレベータの中でしました。
どういうことかというと、例えばある空想上の言語 (そう空想上の言語です) で

sealed abstract class Path
case class File(name: String, file: java.io.File) extends Path
case class Dir (name: String, file: java.io.File) extends Path

と書いたとして、これは視覚的には階層構造がよくわからない。
その点、判別共用体では

type Path =
  | File of string * FileInfo
  | Dir  of string * DirectoryInfo

と、もうこれ UML いらないんじゃね?くらいわかりやすいです。
確かに上の空想上の言語は Java に比べて less typing なのですが、

case class Path
| File(name: String, file: java.io.File)
| Dir (name: String, file: java.io.File)

みたいに書ければもっと less typing(Path を繰り返さなくていい) なんですがね。あ、いや、あくまで空想上の言語の話です。