射っていうのはscalaだと単なる関数だし、関手はmap、モナドはflatMapなだけです。これのどこが難しいというのでしょう。 圏論とかモナドなんて簡単だからscalaを使って説明してみた 内容について考えてみよう。 圏の定義? trait Cat { type A type B def f:A => B } trait Cat { type A type B type C def f:A => B def g:B => C def f_g:A => C = f andThen g } 圏論とかモナドなんて簡単だからscalaを使って説明してみた ここで定義されているCatはただの1本の射であって圏とは言い難い。hom setを定義したというのならまだわかるが、ScalazのHomとは似ているが違う定義だ。具体的に言うと、Homは1本の射fではなく、射を表す型であるCが定義されている。