soutaroのHaskellにっき

2006-06-11

所信表明 所信表明 - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - 所信表明 - soutaroのHaskellにっき

いつもはOCaml型推論アルゴリズムの実装をしています。

Haskellは、タイプクラスが面白そうだなあというのと、ちょっと前までタイプクラスタイプクラス連呼してた知り合いがいるのと、3年くらいモナドが理解できずに悔しいのと、誰かがなんかの拍子にHaskellのコードを書いたときに「さっぱり読めなくて悔しい」のくらいで気合を入れて勉強してみようと思いました。

IDE IDE - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - IDE - soutaroのHaskellにっき

まずはIDEインストールから。Emacsとかmakeとかありえなーい。

Haskell Visual Studio」とかでぐぐるNot FoundとかVHSとかがヒットする。どっちがいいかはわからないんだけど、Haskell Workshopとかに論文を出してるチームであるということと、あとは単純にもう一方が繋がらなかったので、Visual Haskellインストールすることに。うちのVS2005なんだけど、入るかなー?

あれ?Haskell処理系はいいのかな?いや、これ入ってるのか。すげ

とか書いてたら、インストーラコケた。なぜだー

一度、FirefoxとかVirtualPCとかiTunesとか終了して試してみよう

⇒当然ダメ。よく読むと「なんかインストーラおかしいねんけど」と言っているように見える。なんなんだ。もう一度インストーラダウンロードしてみることに。これでダメなら、VS2003じゃないとダメなんだと判断しよう。

ダメだ。

ところで

In order to use Visual Haskell, you need Visual Studio .NET 2003. Right now, this is the only supported version of Visual Studio - unfortunately we haven't yet added support for the 2005 Beta. The Express languages (Visual C++ Express etc.) also will not work, because they don't have support for plugins.

とかWebサイトに書いてあるのがちょっと面白いと思った。microsoft.comのメールアドレスだから、中の人じゃないかと思うのだが。中の人でもbeta版持ってないとかあるのかなあ…

*1

うーむ、とりあえずmsi除くくらいならやってみてもいいと思ったし、中身をハックしても良いと思うし、そうするとHaskellグループなのになんかC#とかVBとかのコードが書き散らかされてて斬新な感じになると思っていたのだが、MS中の人に対して「VSのコード見てやるからよこせ*2」というのはさすがにアレなので、やっぱり止めとこう。

あきらめよう。次はVHSチャレンジ

が、やっぱりWebサイトに繋がらない。

EclipseFP - Functional programming support for Eclipseに行くべきだろうか。おお、haskellのほうは結構更新されてるじゃないか。よしよし。OCamlのほうは2年くらいメンテされてないっぽかったから、完璧に終わったプロジェクトだと思ってたんだが。こっちはGHCインストールからしないとだめなのね…

ghcインストールはこともなく終了。あ、このやろーc:\の直下に入れやがったな…

まずghciを動かしてきちんとインストールできてるか試すことに。

let a = 3

うは。何年か前はインタプリタでletできなくてぶちきれた記憶があるのだが、今はちゃんとできるのね。さすがさすが。んで、終了できなくてはまる、とorzWindowsではEOFはCtrl+zだったか。

ふと気づいたこと ふと気づいたこと - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - ふと気づいたこと - soutaroのHaskellにっき

OCamlやSML#ではletの右辺は、変数の定義に先立って評価されます。そうしないと、右辺が多相レコードの式*3だった場合に、型が定められません。多相レコード型の自由変数の定義がメソッドの型を含むからです。

Haskellでは右辺は必要になるまで評価されません。つまり、型も定まりません。普通ML多相の範囲ではそこに型変数を割り当てておけばそれで型が付くのですが、多相レコード計算のようなStructural Polymorphism(構造的多相?)が入ると、自由型変数が必要になるのでそれではうまくいかないのです。

まり、call-by-needのsemanticsを採用すると、型システムにも制限が加わるわけです。今まで気づかなかったんですが、これはちょっと面白いかも。

↑はウソだな ↑はウソだな - soutaroのHaskellにっき を含むブックマーク はてなブックマーク - ↑はウソだな - soutaroのHaskellにっき

型とランタイムの振る舞いは関係がないな。多分。したがって上のはウソ普通に式の型だけ計算すればよい。

*1:なんでこんな読み間違いしたんだろ…orz

*2自信過剰

*3OCamlオブジェクトとかPolymorphic VariantとかSML#のレコードとか

syd_sydsyd_syd2006/06/13 14:00お久しぶりです。
>call-by-needのsemanticsを採用すると、型システムにも制限が加わる
コレも本当でしょうか?どっちかというとHaskellには値多相がないので「より自由」な気がしてたんですが…(レコード多相をよく知らないので何とも言えない) Haskellの「制限」といえばmonomorphism restrictionかなとは思うんですが。もうちょっとOCaml勉強します。

soutarosoutaro2006/06/13 14:58ウソだと思いますorz(本当かもしれませんが、積極的に主張するつもりはありません。)