直積を「作る」関手って作れないかな?
発端
http://twitter.com/ranha/status/3318384175
http://twitter.com/ranha/status/3318729080
この発言は、
MakeProd :: 圏A → 圏B → 圏AxB(これが直積カテゴリ)
みたいなMakeProdを作れないかなーという事です。
これだと、2引数とったり、関手レベルでカリー化出来ないと行けないのでムムム。
それに対して
http://twitter.com/bonotake/status/3319122903
確かにコレなら!!
http://twitter.com/ranha/status/3319488961
ただしこれだと、元々直積したかった圏D,圏Eに加えて、圏Cと圏C→圏Dの関手、圏C→圏Eの関手を作らないといけないので大変そう。
http://twitter.com/ranha/status/3319828800
http://twitter.com/ranha/status/3319846689
「元々直積したかった圏D,圏Eに加えて、圏Cと圏C→圏Dの関手、圏C→圏Eの関手を作らないといけないので大変そう。」でやるとすると、多分こんな感じ?
http://twitter.com/bonotake/status/3319486001
これは良く分かりません・・・。
http://twitter.com/ranha/status/3319802225
http://twitter.com/bonotake/status/3319730332
2階圏の対象を1階圏として、そうすると射は事実上1階圏から1階圏へ、となりますが、そのとき射って関手になるのかなーとか。
あと、関手じゃないと実装が書けないみたいなイメージがあるんですけど、そうでも無い?
Catの関手書く時にしたって、arityは1だからどっちみち同じ問題に遭遇するんでは無かろうか・・・。
Cat x Cat → Cat の時は、でも、Cat x Catを「関手に任せるんじゃなくて」「定義に従って手でやれば良い」感じなのかな。でも対象が多く成ると結局定義に従って手でやるとかは無理な気がする。手でやるってその範囲はどこからよ、みたいな・・・。
Catの「射」として、実装を伴わせた「parametric polymorphism」な射を作って、そいつで「カリー化」すればいけそうな雰囲気ですけど・・・。