HaskellとOCamlの型の違い

後でちゃんと読む。抜けがあったら追加よろ(他力本願
24
Jun Furuse 🐫🌴 @camloeba

OCaml の stdlib/scanf.ml で山のように local polym. が使われており、OutsideIn でも type scheme をつければもちろん行けるはずだが、型考えるのも面倒。後もそんなものと思われ…

2012-03-27 14:10:09
Jun Furuse 🐫🌴 @camloeba

私の印象では ML系言語では Haskell よりローカル定義を行って名前を外に出さないプログラミングを比較的良く行うのでローカル多相頻度は高いようだ。そしてもともと型スキームをローカルに書く文化がない (その代わりモジュールを単位にsigの形で書く

2012-03-27 14:22:13
shelarcy(しぇらーしぃ) @shelarcy

@camloeba @takuchan GHC 7.4.x (7.2.x) 版ではローカル関数が自由変数を持っていて、かつ自由変数が closed でない場合にのみ多相化しないよう制限が緩和されていますが、これでも厳しいでしょうか? http://t.co/BKtc61T2

2012-03-27 14:30:14
Jun Furuse 🐫🌴 @camloeba

型スキームを書く代わりに、ここは多相letだよ、推論してね、みたいなのを入れれば良いかもしれないが、let poly とか let mono とかダサい、結論として文化的にMLに馴染まないだろう(入れても総すかんを食うだけだと) もちろん現時点で導入するインセンティブは皆無

2012-03-27 14:36:20
shelarcy(しぇらーしぃ) @shelarcy

@camloeba @takuchan monomorphism restriction の影響を受けない場合を closed としているので、このアイデアをそのまま OCaml に持ってくることはできないかもしれませんが。(何を代わりの条件にすれば良いのかしら。)

2012-03-27 14:38:17
Jun Furuse 🐫🌴 @camloeba

と、以上のことを5分で改造実験できる OCaml は楽しいよ!変更は5行程度。オプション引数はイイネ!(手前味噌

2012-03-27 14:39:13
Jun Furuse 🐫🌴 @camloeba

@shelarcy 機械的にに toplevel まで持ってける、の閉包でよろしい?これは実験しづらいが…

2012-03-27 14:50:17
Jun Furuse 🐫🌴 @camloeba

@shelarcy うーん駄目ですね。私が挫折した例は救えない、もちろん関数引数を増やして global に吐き出せばいいけれど、副作用あるかもしれないからHaskell程気軽には出来ない。後方互換性の点からも、これが ML系にそのまま受け入れられることは難しいと思います

2012-03-27 15:00:54
Jun Furuse 🐫🌴 @camloeba

@garriguejej というわけで大問題、というか、MLではなくなることを確認しました

2012-03-27 15:06:00
Jun Furuse 🐫🌴 @camloeba

@shelarcy 取りあえず必要が出た時に考える、ということで。

2012-03-27 15:19:00
Takuya Hitomi @takuchan

@camloeba @shelarcy "Let Should Not Be Generalised"に書かれていることですが、そもそもローカル関数を多相化しないのは、型クラスとGADTにより生成される型に関する述語をどうにかしないと言うところが出発点

2012-03-27 15:56:06
Takuya Hitomi @takuchan

@camloeba @shelarcy なのでそれらが型に関する述語がそもそも出てこないのであれば、ローカル関数の型を制限する必要は何もないと思います。

2012-03-27 15:57:24
Jun Furuse 🐫🌴 @camloeba

@takuchan 勿論ありませんよ。導入したらどれくらいのインパクトがあるか実際に調べてみたかったのです。OCaml にはもうすぐ GADT が入りますし、Coq にも型クラスはあります。OCaml にもまかり間違って型クラスが入ってしまう可能性も無いわけでは…まあ無いでしょう

2012-03-27 16:13:16
Jun Furuse 🐫🌴 @camloeba

@takuchan 私的にはこれが発端です。気がするだけじゃアレなんで RT @garriguejej @camloeba だから最近のような Outside In というある意味でとても弱い型システムが出て来た。…中略…ML でそんなことしたら大問題のような気がする。

2012-03-27 16:17:02
Jun Furuse 🐫🌴 @camloeba

個人的には自作言語に OutsideIn を拝借しようと思っていたのですが、そのままというわけにはいかないことがわかりました

2012-03-27 16:22:20
Takuya Hitomi @takuchan

@camloeba OCamlにもGADTが入るんですね。どの様に導入されるのか、非常に興味深いですね。型システムが複雑になりすぎなければいいんですが…

2012-03-27 16:25:31