@kikairoya あー、確かに Haskell だと自動的に currying が行われるから curried form を知らなくても扱えると
2011-09-05 09:20:04部分適用って部分評価な感じの概念?質問ばかりで恐縮です。 RT @kfujieda: @kikuyuta 昨晩@kikairoya さんという人とカリー化と部分適用について話していたんです。
2011-09-05 10:04:49@melponn あ、なんか消えてる... んーcurryしてuncurryすれば元の関数に近いなにかが出てくるはずと思ってやったら違いましたーということです
2011-09-05 10:20:18@Flast_RO それなら f (a,b) = error "hoge" な関数を curry して uncurry すれば元の関数っぽいのになるはずです
2011-09-05 10:22:11@melponn それはそうなんですが、元からカリー化する必要のないような関数を投げると何もされないと思ったら引数増えましたーということをですね...
2011-09-05 10:23:38@Flast_RO :t curry で現れる ((a,b)->c) の部分が :t f で現れる最初の t に置き換えられただけでは?
2011-09-05 10:27:44@Flast_RO ((a,b)->c)->a->b->c は (t->(t1->t2))->a->b->c になって c がt1->t2 で最初の引数が無くなるので a->b->(t1->t2) 的な。
2011-09-05 10:31:48@Flast_RO あれ、でもやっぱり f は元に戻ってるような? curry するなら t が (a,b) である必要があるってことが追加されただけで。
2011-09-05 10:36:07@melponn 私はfが元からカリー化されてるからcurryに投げてもそのまま帰ってきてuncurryすると(t, t1) -> t2になるんではないか?と思ったのです
2011-09-05 10:38:10@Flast_RO f は t->(t1->t2) な関数なので、((a,b)->c) の (a,b) の部分が t として判断されて、c の部分が (t1->t2) と判断されるんだと思います
2011-09-05 10:41:2915年ほど離れててシナプスが錆び付いています。菊池の理解は「eager な部分評価を haskel が実装してて部分適用と読んでいる。それを説明するのに currying を使うと微妙なずれが気持ち悪い」かな @kikuyuta @kfujieda @kikairoya
2011-09-05 10:42:06@Flast_RO なので a とか b とかじゃなくて Int->Int->Int な関数を curry に渡すと型エラーになりますね
2011-09-05 10:47:12a->b->c の -> は何度見ても左結合にしか見えないしそう考えててそんなに困ったこと無いんだけど、でもやっぱり右結合なんですよねっていう・・・
2011-09-05 11:27:11