twitter便利ですね。作者からリプライきました
@milessabin thanks! what does "closely related" mean? not same?
ということらしいです。
shapeless.TypeClassというのは、数日前に解説書いたやつです
代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出
GHC.Genericの説明読んでいたら、完全に同じかどうかは不明ですが、その「自動導出できる原理部分」の解説が、なんだか似てることに気がついたので上記のtweetをした次第です。
作者が言ってるのだから、少なくとも明らかに関係あるのは間違いなさそうです。
「Haskellでは言語拡張だけど、Scalaでは単なる(マクロの)ライブラリだよ!」
という違い(というか有利な点?)はあるようです。
GHC.Genericとは以下のあたり読んでください。
- Haskellの公式wiki https://www.haskell.org/haskellwiki/GHC.Generics
- GHCの公式ガイド https://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/generic-programming.html
- 日本語訳 http://www.kotha.net/ghcguide_ja/7.6.2/generic-programming.html
- 元の論文
しかし、細かい実装の差異や、完全にできることが同じなのか?あたりがわかってないので、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:関連技術などは、普通のその論文に書いてるっぽいので、論文読もう・・・