以前書いたこれ
コンパイル時に、 String を lift json に変換する macro
https://github.com/xuwei-k/json_macro
のargonaut版を書いてみようと思いたち、しかしScala2.10のマクロは辛いし、勉強がてらちょっとだけあたらしいことに挑戦するため、quasiquoteのコンパイラプラグイン使いつつ、2.10と2.11でクロスビルドするかー。
とやってみたのがこちら
https://github.com/xuwei-k/argonaut-macro
quasiquote使うと、かなり短くなってわかりやすくなるし、scala-reflect内部のクラス知る必要もなく、なんとなく書けば動く感あるし素晴らしいですね。というか、Scala2.10のネイティブのマクロがものすごく使いづらかっただけですが・・・。
そして、それをtweetしたらreplyがきて
.@xuwei_k Nice! Have you looked at `Liftable`? Here's a quick implementation that should work in both 2.10 and 2.11: URL
2014-04-21 00:52:40 via web to @xuwei_k
添削してもらいました。ありがたい。
Liftableという型クラス(?)が、scala-reflect内部にあるらしいです。あと、こうやってマクロ書く場合はこのコミット
https://github.com/travisbrown/argonaut-macro/commit/226e8814f5d1
のように、package名も含めた名前を指定したほうがいいらしいです。
たしかに、こうしないとユーザー側で"import argonaut._"しないといけなくなった、なるほど勉強になる・・・。