ScalazのTypeclassの図作った

以前「怖いScala」のときに紹介したように、すでに他の人が作ったクラス図が存在したり

http://leifwarner.net/scalaz.svg

また、自動で生成されるクラス図のサイトかなり昔に作ったこともありますが

http://class-diagrams.herokuapp.com/scalaz.MonadPlus.svg
https://github.com/xuwei-k/heroku-class-diagrams

また別のもの作りました。

継承関係を線で結んで表すのもいいけど、いわゆる「ベン図(Venn diagram)」という、
論理和とか論理積を表すときによく使われるような、円が重なっていて集合の関係がわかりやすいやつ使ったらどうかな?と思って、svg-editというオンラインのSVGエディタ使って、地味に作ってた、結構時間かかった(なんて暇人なのでしょうか・・・)
丸と四角が混ざってるのは特に深い意味があるわけではありません。*1
この図のほうが
「BindとApplicativeが重なってる部分がMonad」とか
「(BindとApplicativeに加えて)更にPlusEmptyも重なってる部分がMonadPlus」とか
「Applyは完全にFunctorの中にあるので、Applyだったら必ずFunctor」
とかがわかり易くないですか?どうですか?*2

http://xuwei-k.github.io/scalaz-typeclasses.svg

SVGのソースコード

Scalazのversionは7.1.0-M4*3
Monadと同じkindのものしか載せてない。つまり、EqualとかArrowとかがない。また、Monadのサブクラスとかのそれほど重要じゃないものも一部載せてない

SVGのほうは、文字のところクリックするとgithubの該当箇所にとぶ

*1:全部四角で統一のほうがよかっただろうか・・・

*2:本当は、OptionやListは、"MonadPlusかつTraverseかつCobind"なので、それらが重なってる部分も存在したほうがいいのだが、グチャグチャになるので分けてある。なので、厳密にはベン図ではなく、また、オイラー図でもない

*3:新しいversionがでた場合、気が向いたら更新するかもしれないし、しないかもしれない