2009-06-01から1ヶ月間の記事一覧

条件つき alias

extags を ctags に alias するといった、元々存在するコマンドに alias するということは、頻繁とはいかなくともぼちぼちある。vim と vi とか。こんなとき .bashrc をいくつかのマシンで共有していると、 "ctags がある状態で ctags を extags の alias に…

hGetContents と hClose

hGetContents に渡したハンドラを hClose すると、hGetContents の結果が空文字列になる。 import IO (openFile, IOMode(ReadMode), hGetContents, hClose, bracket) f1 = do h <- openFile "hoge.txt" ReadMode s <- hGetContents h return s f2 = bracket …

一般的な例外処理

なんか書こうと思った (というか一回書いたんだけど) けど、よくまとまってる記事があった。2006-06-13 - syd_sydの日記 - haskell紹介されてるのは今でいう古い例外モジュールだけど、例外の型を明らかにしないといけないこと以外はあんまり変わってないん…

バックグラウンドで実行したアクションの結果を受けとる

Java の Future みたいなものを Haskell で。 import Control.Concurrent (forkIO, newChan, writeChan, readChan) type Future a = IO a onBackground :: IO a -> IO (Future a) onBackground act = do ch <- newChan forkIO (act' ch) return (readChan ch…

IO エラー処理

Haskell のエラー処理と言うと、ErrorT だかなんだかで「たかがエラー処理で、なんでこんなにややこしいことを覚えねばならんのだ」と投げ出したくなるのだけど、IO エラーに限ればけっこう簡単。Either でラップして結果を受けとる try と、エラーハンドラ…

Haddock で日本語が出ない原因を調べる

Haddock では non-ASCII な文字は全て &#xddd; 形式で出力するという仕様となっている。乱暴だとは思うが、とりあえずこうしておけばブラウザからはちゃんと見えるし、仕様については、まぁいいんでないかなと思う。しかし実際にやってみると、これすらも出…

Haddock を使ってみる

Haskell 界のデファクトスタンダードなドキュメント生成ツール Haddock を使ってみる。とりあえず関数の説明とか、引数の説明とか、データ型の説明あたりの、当たり前のことができるようになれれば満足。Haddock User Guide を参照した。 module Main where …

UNIX Domain Socket を使う (クライアント編)

UNIX Domain Socket に対して echo チックなことをやるアプリケーション。本家 echo と同様、引数をそのまま出力する。複数の引数がある場合には、これらを空白で区切る。 本家 echo と違うのは、ソケットファイルのパスを受け取らなければならないというこ…

UNIX Domain Socket を使う (サーバ編)

Haskell で UNIX Domain Socket を使ってみる。クライアントによってソケットに書き込まれた情報を、そのまま標準出力に出力するというアプリケーションを作ってみる。とりあえずサーバ。 import IO (try, hPutStrLn, stdout, hFlush, stderr) import Contro…

Hello World

main = putStrLn "hello"