2009-01-01から1年間の記事一覧

2009年忘年会

haskell-jp にアナウンスしましたが、読んでいないという人がいるようなので、こちらにも書きます。2009年忘年会のWikiページができています。参加者には全員発表してもらいますので、各自テーマを選んで下さい。

Haskellと副作用

よく、Haskellには副作用がないと言われるが、それは間違いだ。確かに、Haskell には状態の変化(あるいは再代入)という副作用はない。しかし、入出力という副作用はある。この記事では、Haskell の副作用に対して、命令型プログラマーにすっきりと理解でき…

GHC は再帰を末尾再帰に最適化するか?

GHC に -ddump-simpl オプションを渡すと、Core 形式(中間表現の関数型言語)を出力するというので、Performance/Accumulating parameterのコードに対して Core を出力しみた。 len 末尾再帰でない len のコードはこう。 len :: [a] -> Int len [] = 0 len …

プログラミングHaskellの裏舞台

中村正三郎さんがプログラミングHaskellの書評を書いてくれましたので、触発されて少し補足します。 訳について 直訳を避け、意訳する 訳は、直訳を避け意訳を心がけました。原文が想像できない自然な日本語を目指しています。たとえば、章のはじめには必ず…

遅延評価と末尾再帰と余再帰

遅延評価では再帰の効率はどうなるかという問題です。Real World Haskell で、末尾再帰は重要だと言った後に、遅延評価では末尾再帰なんて気にするなとちゃぶ台を返しています。ようやく haskell-cafeで答えを見つけたので、Luke Palmer さんの許可を得て訳…

Haskellerはプログラミング界の立川談志である

昨日の Haskell ナイト用に作ったスライドがあったんですが、見せるタイミングがありませんでした。悔しいので、ここに書いちゃいます。 Haskellerはプログラミング界の立川談志である。 なぜなら、多くのプログラマーはLisperに憧れている(らしい)。 たと…

Haskellで賢人鳥(またの名をYコンビネーター)

賢人鳥で書いた内容の訂正です。unsafeCoerce を使えば、Haskell でも自己言及するコードが書けます。すなわち、ものまね鳥はこうです。 import Unsafe.Coerce m x = x (unsafeCoerce x) という訳で、チョウゲンボウとホシムクドリから賢人鳥を導出してみま…

Haskellナイト

関係筋によるとHaskellナイトにはいろいろ特典があるらしい。 来場者すべてに、もれなく「カブトムシのワッペン」が配られる 会場で「Real World Haskell」を買うと、「カブトムシの T シャツ」が付いてくる 「プログラミングHaskell」が特別価格2,500円で販…

プログラミングHaskellの誤植

プログラミングHaskellの誤植をまとめるページを作りました。誤植の報告は、正式にはオーム社へメールですが、僕に言ってもらうので構いません。メールでも、ブログへのコメントでも、チャットでも、口頭でも、何でも OK です。よろしくお願いします。

自分で作る Num の instance

11月14日のHIMAで、みんなが「Num の instance はよく作る」という発言をしていました。Num の instance なんて自分で作るもんじゃないと思っていた僕は衝撃を受け、どういうときに作るのが尋ねました。すると、msakai さんが「有限体での計算」と答え、「す…

第2回 HIMA

Haskell 好きが IRC で、とめどなくお喋りする会の二回目を明日の夜開催します。 11月14日(土) 20:00 〜 22:00 サーバー:irc.freenode.net チャンネル:#haskell.jp テーマ:Typeclassopediaを読んで来て、分からないことを話す。 Haskell 好きで Typecllas…

itojun award

久しぶりにIETFに参加して来た。itojun awardの選考委員なので、表彰式に立ち会うためだ。第一回目の itojun award は、Google の Lorenzo Colitti さんと Erik Kline さんに送られた。これは、多くの人に納得して頂けるのではないだろうか?表彰式には itoj…

プログラミングHaskell

本日刷り上がって参りました。発売は11月11日です。オーム社の方曰く「ソフトカバーなのに、ハードカバーのように平たく開ける特殊な製本」だそうです。Haskellナイトでも販売するようです。では、Haskellナイトでお会いしましょう。プログラミングHaskell作…

â– 

HIMA & 忘年会

昨日の RWH 読書会で、内容と日程が決まりましたのでお知らせします。 第2回 HIMA Haskell 好きが IRC で、とめどなくお喋りする会です。デフォルトでは、第一土曜日の夜になっていますが、今回は私の都合で、11月14日(土)となります。内容は Typeclassopeid…

Haskell本の翻訳書

Haskell本の翻訳が2冊、発売されます。 Real World Haskell オライリーの「Real World Haskell」が、同じ名前の「Real World Haskell」で、10月24日に発売される予定です。分厚い本をよく訳したものだと感心します。訳を担当した山下さん、伊東さん、お疲れ…

開催予告

IRC で Haskell のことをだらだらとチャットする HIMA ですが、第二回目は11月14日の夜です。あと、年に4回ぐらいはやりたい Haskell の集いですが、記念すべき第一回目は12月21日の週を予定しています。場所は、神保町。Haskell を肴に酒を呑みましょう!

Emacs での Haskell プログラミングを幸せにする

前から予告していましたが、Emacs での Haskell プログラミングを幸せにするプロジェクトを開始しています。ゆくゆくは、haskell-mode を置き換えたいのですが、とりあえず haskell-mode と共存して、補完とドキュメントの閲覧が幸せになるコードをリリース…

クライミングジム・マップ

重い腰を上げて、クライミングジム・マップを更新しています。 クライマーの方へ ずいぶんさぼっていましたが、ジムをいくつか追加しました。手元の未登録リストには、まだ30弱ぐらいのジムあります。暇を見つけては追加していきます。 Googlemaps プログラ…

.cabalファイルにタブを入れない方法

Haskell 使いで、Emacs 使いで、Cabal でパッケージを作る人のための話題。あー、ニッチだ。Emacs で .cabal ファイルを作るとき、タブが入ってしまって、cabal configure すると怒られた経験がある人は、.cabal ファイルの先頭に以下の行を入れましょう。 -…

遅延評価だけだと出力の順番が定まらない例

Haskell に関してよく見かける説明は、おおむね次のような感じだ。「遅延評価では、その値が必要になったときに初めて評価されるので、順番が大切な入出力とは相性が悪い。」Haskellの入出力は、基本的にIOモナドを使用しないと扱えない。IOモナドは、入出力…

OpenGL

Haskell の OpenGL ライブラリが新しくなり、副作用として Mac で動かないようになっていた問題は、9月13日の更新で解決されたみたいだ。ようやく、Mac で OpenGL が復活した。しかし、昔作った GLUT を使うプログラムがコンパイルできなくなっていた。どう…

Emacs で Haskell の補完

Emacs の haskell-mode は、補完がないので使いにくいです。という訳で、Haskell の予約語とモジュール名を補完する elisp を書いてみました。haskell-mode と共存します。モジュール名は、ghc-pkg dump を解析して入手します。このパーサーは、Haskell で書…

Mac の GIMP を使い易くする

Mac の GIMP は使い物にならなかった。なぜなら、GIMP のあるウインドウから、他のウインドウにカーソルを移動させても、自動的にフォーカスされないからだ。そのウインドウを選択するには、クリックする必要がある。たとえば、ペンの太さを変えようとすると…

Programming in Haskell

久しぶりにサポートページを見たら、韓国版が出版されていた。それよりも驚いたのは、練習問題の答が載っていたこと。

例題で比較する状態系のモナド

金曜日に状態系のモナドを説明しないといけないので、例題を書いて比較できるようにしておきます。呪文として、以下のモジュールを読み込んでおきましょう。 import Data.Char import Control.Monad.Identity import Control.Monad.Reader import Control.Mo…

大事なのはどっち?

おせっかいで、本当にごめんなさい。言葉の順番がいかに重要かを示すひとつの例: 今日の名言「今大事なのは仕事 いつも大事なのはお前」 「仕事と私とどっちが大事なの」という 長年にわたって人類を悩ませ続けてきた難問への 見事な解答だと思う。 言葉の…

Haskellでtry/throw/catch/finally

Haskellで実装する関数の多くでは、いわゆる Java の try/throw/catch/finally は必要になりません。しかし、IO が絡んでくると話は別です。異常な状態に陥ったら、throw してトップレベルに戻る方が、コードがすっきり書ける場合があります。 Java で言う t…

Fiemacs 3.7

Fiemacs 3.7 が承認されました。

平原さんを偲ぶ

昨日は平原さんの命日だった。一年が経つのはあっという間だ。この一年の間に、我が家では男の子が家族に加わった。尊敬する平原さんのような人に育って欲しいと思う。昨夜は、平原さんの実家から頂いた焼酎を飲んで、故人を偲んだ。