https://github.com/scalaz/scalaz/pull/693
tagged typeとは、Haskellのnewtypeみたいなやつです。
newtypeみたいといいつつ、今までは、元の型のメソッドもそのまま呼べていて、その点ではHaskellのnewtypeと結構異なるものでした。それにより(?)たとえば、こんな問題発生します
https://github.com/scalaz/scalaz/issues/338
これ以外にも色々微妙な問題があります。そもそも、tagged type自体、Scalaのバグか仕様かわからないギリギリのところと、JVMのtype erasureを悪用したものなので、まぁ問題が発生するのは当たり前かもしれません。
それで、「元の型のメソッドを直接呼べない」新しいtagged typeが入りました。よりHaskellのnewtypeっぽくなったとも言えます。shapelessにほぼ同等のものがすでにあったようです。
最初は、単に新しいものを追加して、2種類のtagged typeが存在することになる感じだったのですが、「新しいtagged typeのほうがいいし、こっちデフォルトにするか?」「いや、古い方いらないのでは」という流れで、なんと、古いtagged typeは消えました・・・。
そのままメソッド呼べるのは便利だけど、デメリットも結構あって、結局トレードオフな感じです。新しい方は、毎回unwrapしないとメソッド呼べないですが、そのかわり、いくつかのバグを回避できたり、いいこともあるので