型について
>mixiでも微妙に話題が沸騰しているのが、 OCaml などのプログラムに型を書くか?という疑問。
>
>そこそこの規模のまともなプログラムならば mli を書かないとやってけないので、書かざるをえないという気が。というか先に mli を書き、それから実装を書くのではないかな(もちろん実装を書きながらインタフェースを修正することもある。そんなにきっちり設計して書くようなちゃんとしたものではないので)。
>
>あーとそれから、 mli を書かないってのは、小さなプログラム片やテストプログラムを書く場合を除いて、まず考えられない。抽象データ型+モジュールによるプログラミングというのはそういうものなのではないかと思う。
>
>で、 Haskell の場合の、やけに型を書く文化というのが違和感を持たれている気がするけど、あれは違うと思う。あれは、 OCaml でいえば mli と ml を一緒のファイルに書いているようなものだと理解すると話が速い。型を書く文化なのではなく、 OCaml では mli に型を書かないといけないのに Haskell ではそれを省略することができる(逆に OCaml では外部に公開する型をインタフェースのような書式で書くことができないのに、 Haskell では書くこともできる)ということ。
>
>ファイルを分けるか、同じファイルに書くか、というのは、型の説明が独立していて読みやすいという見方もあるし、いちいち分けるのが面倒くさいという見方もあって、これは一長一短、どちらが明確に良いということはない気がする。ただし caml-mode では C-cC-a で mli と ml を行き来できるので、2つのファイルにしてもさほど不便ではなくなっていて、なかなか良い(ただ、カーソルの位置までは調整してくれないので、そこまで便利ということもない)。個人的には、 OCaml でも通常のプログラム部分にも val 〜 の式を書けると嬉しい。
>
>それとは別に、オプション型とかオブジェクトとかが挟まると OCaml は正しく型推論してくれない場合がまだあるので、実装時に型を書かざるをえない場合というのもある。たとえば→
>http://www.jmuk.org/d/?path=2005/08/11#d11t02
>
これは本質的にはオプション型の問題か。誤解して覚えていた。この辺は実に奥が深いです。 >
これは本質的にはオプション型の問題か。誤解して覚えていた。この辺は実に奥が深いです。 >
