Scalazの微妙な型クラスたち

前からこんなissueありますが

What to do about lawless classes?


たとえば以下のような感じで、LengthとIndexとEachはFoldableがあれば実装できます*1

https://github.com/xuwei-k/scalaz/commit/249c3ed58fe17b7d6525ebc98fabaa6cf2748830

  • その実装が正しいか?
  • そうなっているべきか?
  • こういう継承関係でないほうがいい場合があるか?

などは置いておくとして。(これ考えても答えが出ないというか、考えようがない気がする)

(ちゃんと確かめてないですが)大抵の場合は、現在のEachやIndexやLengthの実装は、このFoldableから導出した実装と同じ動作になる気がします(速度は遅いとしても)

あと、Eachは特に副作用前提なので、lawなんて作れるわけない感じありますね。

*1:Functorでもできるかも