val は変数を定義式の値に設定
def は変数を定義式自体に設定
tail の場合、def だと参照するたびにコンストラクタが評価されることになるはず
つまり、初期化引数は同じでも生成されるオブジェクト自体は別物になる