椿の日記

たぶんプログラムの話をします

Haskell

ダックタイピングと現代魔法

よくわかる現代魔法にHaskellの一文が出てくるから、っていうので興味沸いて読んでみました。 出てきたのはホントに一文であった。まあそれはともかく、自分の場合「おっ」と思わせたのはこちらの一文ですね。「意思を持ち物事を為しとげるものをヒトと定義…

GHCが新しくなってた

タイムリーなのかなんなのか、どうやらGHC-6.12.1から文字コード周りが改善してるようですね。ドキュメントを見る限りストリームに対して明示的に文字コードを指定することでUCS-4へ変換してくれるようです。あと並列化周りに色々と更新があったみたい。まだ…

文字列の内部表現

HaskellのソースをUTF-8で書いてたからリテラルも当然UTF-8だと思ってたら、んなわけがなかったですね。ちゃんとUCS-4に変換してありました。なので、プログラムの内部では常にUCS-4で扱い、入出力部分でエンコーディングを変換するのが良いみたい。てか、そ…

Haskellでiconv

苦戦しちゃったので作業メモを残しておきます。 ビルド環境はGHC 6.10.4です。 iconv.dllをインポートする dllをダウンロード http://www.kaoriya.net/ ここから、ビルド1.10-20060516のdllを取得してくる。 reimpのインストール http://sourceforge.net/pro…

デリミタを利用して少しずつ評価

接続先はIRCなんですが、IRCの文字コードはISO-2022-JPで、かつプロトコル的にコマンドは必ず改行で終わるため、 改行コードを使ってStringを分割し、各StringごとにIConvで変換するという方法を取りました。 import Codec.Text.IConv (convert) import qual…

Data.ByteString.Lazyでハマる

IConvパッケージを入れたのはソケットから取得したテキストを変換しながら出力したかったためなのですが、この変換関数がByteString.Lazyを受け付けるので少々厄介なことになっております。 cs <- hGetContents sock putStrLn csこれだと、sockから送信され…