HaskellFAQ

2004-10-21 03:29:42 +0900 (1409d); rev 3

だいたい合ってりゃいいよね、 てな感じのいいかげんな Haskell FAQ。 手続き型言語ユーザの視点で書いてます。

「Haskell」ってどう読むの

「はすける」みたいです。 ちなみに論理学者の Haskell B. Curry に由来するそうです。 「カリー化」の Curry もこの人の名前から来てます。

Haskell は関数型言語なの?

そうです。

関数型言語って何さ。

関数がプログラミングの中心にあるような言語のことです。 定義は人によってズレがありますが、 少なくとも C や Java は関数型ではなく、Haskell は確実に関数型であり、 ML も関数型であるというところまではまず間違いなく一致しています。 Lisp を関数型に入れるかどうかは人によって違うようです。

Haskell は純粋な関数型言語らしいけど、普通の関数型言語とはどこが違うの?

副作用のあるコードをいきなり書けないところです。 書けないわけではありません。 ここを深くつっこむとわけがわからなくなるうえに宗教戦争が勃発するので、 あまりつっこまないでください。

誰が作ってんの?

委員会があるみたいです。

Haskell と ML ではどっちがいいの?

「よい」の定義によります。が、一般的な違いを言うならば、 副作用のあるコードは ML のほうが気軽に書けること、 Haskell は非正格 (non-strict) である、という二点が挙げられます。

「非正格」って?

プログラムがどこから評価されるか決まってない、という性質です。

それでプログラムが書けるの?

書けるんです。そこが面白いとこです。

ML プログラマとは仲が悪いんですか。

昔からマイナー分野は内ゲバが激しいですね。

Lisp プログラマとは仲が悪いんですか。

Common Lisp プログラマと Scheme プログラマの関係と同じくらいです。

ぶっちゃけ Haskell プログラマって日本にどのくらいいるんだろう。

500 人くらい? (2003 年現在)

処理系はどれがいいの?

コンパイラなら GHC、インタプリタなら GHC についてる ghci か Hugs。 どちらもそれなりには安定してます。

言語の最新バージョンはどれよ。

Haskell98 というのが最新です。

ライブラリはどのくらいあるの。

あんまりありません。 以下の「リンク集」のところにライブラリ集へのリンクがありますので見てください。

標準ライブラリが固まってないように見える。

どうやら今は移行過程にあるようです。 hierarchical library という階層化されたやつが新しいもののようですね。

Perl の CPAN みたいのはないのかな?

ないみたいです。

それで結局普通のプログラムは書けるのかよ

UNIX コマンドの例を下のほうに置いときます。 またコンパイラの GHC は Haskell 自身で書いてあります。

モナドって何?

モナドとは何か……と考えるより、 「モナドはどう使うのか、どう動くのか」と考えるほうが幸せになれます。

じゃあ、モナドは何に使うの?

最もよく見かけるのは IO モナドです。 これは I/O をするときなど、副作用が発生する場合に使います。 ただし、それはたまたま I/O に使えるから使っているというだけで、 モナドと I/O が必ずしも関係あるわけではありません。

副作用、あるんじゃん!

だからつっこんじゃだめだってば。

じゃあ IO モナドはどう使うの?

UnixCommandInHaskell にいくつか実例があるのでそれを見てください。 「IO」と書いてあるところで IO モナドを使っています。

ちょっとプログラム書いてみたけど、IO モナドってウザいね。

まったくです。

「Haskell は参照透明性が保たれているから凄いのだ」と聞いたんだけど、参照透明性って何?

おもいきり簡単に言うと、副作用が起きないという性質です。

それっていいの?

いいという人もいますし、そのほうがいいプログラムもあります。

でもデカいデータの一部分だけを変更したいことってあると思うけど、そういうときは全部作り直すの?

そうです。

そういうプログラムには Haskell は向いていないかもしれません。 しかしそういうプログラムばかりではありませんし、 ハードウェアが速くなれば問題にならないということもあります。

メーリングリストある?

日本語のメーリングリストがあります。 http://www.sampou.org/cgi-bin/haskell.cgi の案内を見てください。

Haskell プログラムって速いの?

動かすプログラムと、「速い」の基準によります。 しかし一般的に言うと、カリカリにチューンした C よりは遅く、 Perl や Ruby などのインタプリタよりは速い、という感じです。 ただしこれは GHC でコンパイルした場合で、Hugs はめっちゃ遅いです。

今の流行りはオブジェクト指向なんだよ、Haskell はオブジェクト指向じゃないからヤダ、とにかくオブジェクト指向にしてください!

O'Haskell というオブジェクト指向拡張があるみたいです。

http://www.math.chalmers.se/~nordland/ohaskell/

日本語の情報が少なすぎるぞゴルァ!

激しく同意! ぜひ自分でもサイトを作ってください。

ところで、なんで Haskell なんか使ってんの。

関数型ってなんとなくかっこよさそうだから。

loveruby.net というドメインで Haskell のページを置くのはいかがなものか。

そんな細かいことを気にしちゃだめです。


system revision 1.162