Scala で Haskell の newtype ? 的な面白いことが流行ってる件

みなさん、tagged type は勿論知ってますよね! (ぇ

このあたり読んでください↓
一番最初に発見(?)した際のtweet
ねこはる先生による簡単な紹介
specs2の作者のetorreborreさんによる紹介
すでに Scalaz-Seven に入っていますの図

で数日前、milessabinさんが、またそれと似てるけどちょっと違ったversionを作っていました。

で、その後
(以下すごい適当な訳でお送りします)

「shapeless っていう自分が作ってるライブラリに早速入れたよ!」

「素晴らしい!specs2にも入れたよ!」

https://github.com/etorreborre/specs2/compare/6ea94201be...c1c0cf84e8#L0L9

その他
https://twitter.com/#!/milessabin/status/166799255183433729
https://twitter.com/#!/etorreborre/status/166843623453900800

的な楽しいやりとりが行われていました。(etorreborreさんとmilessabinさん以外のやりとりもあったけれど)
わかる人はコード見ただけでわかると思いますが、とにかくすごいですね、Scalaの型システムやっぱりキモイというか。ただ、自分のHaskellの知識が無くてあれですが、これがHaskellnewtypeと全く同じなのか、同じことができるのかどうかは微妙というか、よくわかってません。*1
以前のものは、tag つけて、既存の型を新しい型として解釈する感じです。
が、新しいものは例にあるように
(中のオブジェクトの実態はまったく変わっていないのにもかかわらず) 既存の型のメソッドをなかったことにできます!
個人的に思ったのは、pimp my libraryに似ているんじゃないか?とも思いました。 pimp my library ってメソッドを追加できる(ように見せかけられる) わけですが、pimp my libraryする際に、とりあえず元のオブジェクトのメソッドを全部なかったことにできるという感じでしょうか?
だがそれだったら、最初から新しい型のオブジェクトのをつくって保持しておけばいいじゃないか?とも思うし、ちょっと自分でも使い所がうまくわかってないし説明できません。
たとえば milessabinさんの最初の例だと、結局 mySize っていうメソッドを呼ぶ際に、一度 MyStringOps っていう中間オブジェクトができるわけで、だったら MyStringOps を最初から生成して変数に保持して取り回しても、コスト変わらないのでは?という疑問
しかし、Specs2で早速使っているコードをみたら、あーなるほど、むしろwapperのオブジェクトには、メソッドをなにも追加せずに単に目印的に使えば有用かもしれない(?)
とも思うし、やっぱり自分の中でよく整理できてません。誰か、わかりやすく使いどころ(もしくは、使えない or 使う必要ない理由)を説明してください。自分の理解が深まったか、もしくはtwitterなりgithubを観察して、なにか動きがあれば、追記するか新たに色々書くと思います。

*1: たしかに newtype っぽいけれども、Haskellのものと違うのだとしたら、newtype っていう呼び方はどうなんでしょうね的な疑問も