shapeless.TypeClassとGHC.Generic

twitter便利ですね。作者からリプライきました





ということらしいです。
shapeless.TypeClassというのは、数日前に解説書いたやつです


代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出


GHC.Genericの説明読んでいたら、完全に同じかどうかは不明ですが、その「自動導出できる原理部分」の解説が、なんだか似てることに気がついたので上記のtweetをした次第です。
作者が言ってるのだから、少なくとも明らかに関係あるのは間違いなさそうです。



Haskellでは言語拡張だけど、Scalaでは単なる(マクロの)ライブラリだよ!」
という違い(というか有利な点?)はあるようです。


GHC.Genericとは以下のあたり読んでください。

しかし、細かい実装の差異や、完全にできることが同じなのか?あたりがわかってないので、GHC調べるというか、上記の論文などを読んでみて、もしなにかあれば書きます。
もしくは誰か知ってたら教えてください。


あとは

  • そもそもGHC.Genericって、上記のページによると、GHC7.2からなので、そんなに古くからあるわけではない
  • じゃあ現在どのくらい使われているのか?
  • Haskellにおいて、どのくらい気軽に使っていいものなのか?使わなくて済むなら避けるべきなのか?
  • 別の方法で、同じことができるものは存在するのか?
  • Haskellの標準の範囲ではない?
  • デフォルトでEqなどがderivingできる機能との、今後の関係(色々統一される?)
  • FunctorやTraversableのderivingの機能もあるけど、それらとの関係
  • このライブラリ https://hackage.haskell.org/package/generic-deriving や、その他関連技術、ライブラリの関連

とか、色々わからないことだらけです。*1


あとそういえば、前回のshapelessの解説ブログのはてぶに
HaskellでいうTypeable的な話か?」
というコメントありましたが、確かにもしかするとTypeable少しは関連するかもしれない(自分も自信ない)けど、直接Typeableに対応するものではないですね。shapelessには、Typeableに対応する別のものありますし https://github.com/milessabin/shapeless/blob/shapeless-2.0.0/core/src/main/scala/shapeless/typeable.scala

*1:関連技術などは、普通のその論文に書いてるっぽいので、論文読もう・・・