Haskellのdataとnewtype

stackoverflowに回答があった。

types - Difference between `data` and `newtype` in Haskell - Stack Overflow

使いドコロがわからなくて使ってなかったしこれ読んでも使いどころは特にわかってはいないんだけど、とりあえず違いについてはわかった気がする。

  1. dataは新しいデータ構造を定義するのに対して、newtypeは実行時にはラップしている型と同じ扱い(representationが何なのかわからないので正確にはわかってない)になるのでnewtypeのほうがパフォーマンス的に有利
  2. newtypeは実行時にはコンストラクタが消去されるから1つの引数しか取れないし、代数的データ構造は作れない
  3. strictness (よくわからん)
  4. コンストラクタがないからunboxしなくていいみたいな、1.と同じようなことな気がする

という感じっぽいことがわかった。(わかってない)