また細かいtypeclassの話で、それほど重要じゃないけどメモ。
「ZipとUnzipのtypeclassにlawないけど、"Zip + Functor"とか"Zip + Functor + Unzip"なら、law作れるんじゃないの?」
「"Zip + Functor"って単にApplyと同じでは?」
https://github.com/scalaz/scalaz/issues/278#issuecomment-20230322
なるほど、そういえばそうか・・・。つまり現状ApplyはZipを継承してないけど、継承していてもいいということに?
https://github.com/xuwei-k/scalaz/commit/49509a0f09586d88d43
ただ、以下のようなメソッドあるので
https://github.com/scalaz/scalaz/blob/v7.0.1/core/src/main/scala/scalaz/Zip.scala#L44-L50
https://github.com/scalaz/scalaz/blob/v7.0.1/core/src/main/scala/scalaz/Apply.scala#L37-L42
実用上別に継承してなくても、ほとんど困らない。
ただ、「ApplyのインスタンスだったらZipは自動で導出できる」わけで、"def ap"と"def zip"を両方実装してる分、ちょっとだけ実装の手間が増えてるというか重複してるくらい。
ところで、現状Scalazにおいて、Zipのインスタンスになってるものは、すべてApplyのインスタンスにもなっているみたい。つまりそれなら「Zipのtypeclassが必ずしも必要ない」ということになってしまうけど、なにか「Zipにはなるけど、Applyにはならない」例ないかな・・・