- xhl_kogitsune
- 26192
- 2
- 40
- 3
OCaml の stdlib/scanf.ml で山のように local polym. が使われており、OutsideIn でも type scheme をつければもちろん行けるはずだが、型考えるのも面倒。後もそんなものと思われ…
2012-03-27 14:10:09私の印象では ML系言語では Haskell よりローカル定義を行って名前を外に出さないプログラミングを比較的良く行うのでローカル多相頻度は高いようだ。そしてもともと型スキームをローカルに書く文化がない (その代わりモジュールを単位にsigの形で書く
2012-03-27 14:22:13@camloeba @takuchan GHC 7.4.x (7.2.x) 版ではローカル関数が自由変数を持っていて、かつ自由変数が closed でない場合にのみ多相化しないよう制限が緩和されていますが、これでも厳しいでしょうか? http://t.co/BKtc61T2
2012-03-27 14:30:14型スキームを書く代わりに、ここは多相letだよ、推論してね、みたいなのを入れれば良いかもしれないが、let poly とか let mono とかダサい、結論として文化的にMLに馴染まないだろう(入れても総すかんを食うだけだと) もちろん現時点で導入するインセンティブは皆無
2012-03-27 14:36:20@camloeba @takuchan monomorphism restriction の影響を受けない場合を closed としているので、このアイデアをそのまま OCaml に持ってくることはできないかもしれませんが。(何を代わりの条件にすれば良いのかしら。)
2012-03-27 14:38:17と、以上のことを5分で改造実験できる OCaml は楽しいよ!変更は5行程度。オプション引数はイイネ!(手前味噌
2012-03-27 14:39:13@shelarcy うーん駄目ですね。私が挫折した例は救えない、もちろん関数引数を増やして global に吐き出せばいいけれど、副作用あるかもしれないからHaskell程気軽には出来ない。後方互換性の点からも、これが ML系にそのまま受け入れられることは難しいと思います
2012-03-27 15:00:54@camloeba @shelarcy "Let Should Not Be Generalised"に書かれていることですが、そもそもローカル関数を多相化しないのは、型クラスとGADTにより生成される型に関する述語をどうにかしないと言うところが出発点
2012-03-27 15:56:06@camloeba @shelarcy なのでそれらが型に関する述語がそもそも出てこないのであれば、ローカル関数の型を制限する必要は何もないと思います。
2012-03-27 15:57:24@takuchan 勿論ありませんよ。導入したらどれくらいのインパクトがあるか実際に調べてみたかったのです。OCaml にはもうすぐ GADT が入りますし、Coq にも型クラスはあります。OCaml にもまかり間違って型クラスが入ってしまう可能性も無いわけでは…まあ無いでしょう
2012-03-27 16:13:16@takuchan 私的にはこれが発端です。気がするだけじゃアレなんで RT @garriguejej @camloeba だから最近のような Outside In というある意味でとても弱い型システムが出て来た。…中略…ML でそんなことしたら大問題のような気がする。
2012-03-27 16:17:02個人的には自作言語に OutsideIn を拝借しようと思っていたのですが、そのままというわけにはいかないことがわかりました
2012-03-27 16:22:20@camloeba OCamlにもGADTが入るんですね。どの様に導入されるのか、非常に興味深いですね。型システムが複雑になりすぎなければいいんですが…
2012-03-27 16:25:31