Scalazで新しいtypeclassを追加する手順

coreに追加する場合の話
例としてHogeというtypeclassを追加する場合

なにか手順抜けてたら教えて下さい。自分でも気づいたらあとで追記します

  1. project/GenTypeClass.scalaを編集
  2. GenTypeClassからsbtコンソールでコマンド打って、Hoge.scalaとsyntax/HogeSyntax.scalaを生成
  3. syntax/Syntax.scalatrait Syntaxesの適切な場所(kind毎に分かれてる)にobject hoge extends ToHogeOps を定義
  4. syntax/Syntax.scalaの下の方にあるtrait ToTypeClassOpsに、with ToHogeOpsを追加
  5. package.scalaのコメント欄に追加

以下の2つは、GenTypeclassでHoge.scalaとHogeSyntax.scalaを生成した後なら、いつでもいい

  • Hoge.scalaにfooメソッド追加
  • Hoge.scalaのfooメソッドを呼び出すメソッドを、HogeSyntax.scalatrait HogeOpsに追加

で、なんでこんなこと書いているかというと、

Foldable1とTraverse1追加したときに、ToTypeClassOpsに追加するの忘れたみたいから数日前pull reqした

https://github.com/scalaz/scalaz/pull/327

いま気づいたけど、最近追加されたProfunctorも、これ忘れてる部分がある。(そのうちpull reqする)
結構このあたりScalazのコアなコミッターの人でもうっかり忘れてる場合が多々あるので、
今一度あとでゆっくり見てチェックしよう・・・