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

pure は良きにはからって型を合わせてくれます。

Applicative functorsに pure という関数が登場します。 その役目は Monad の return に似ています。 まず、 return の復習、というより良く分かっていませんでした・・・Orz class Monad m where (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> …

Haskell の文字列に含まれる全角英数字を半角に、半角英数字を全角に変換する。

入力された文字列の英数字を全角から半角に変換したい場合があります。 Haskell の内部コードは UCS4 が使用されています。UCS4 では ASCII の文字は1バイト文字列と同じ順序で領域が割り当てられています。それに対応する全角文字は 0xff01 から割り当てら…

hFlush stdout

Learn You a Haskell for Great Good!を写経して学習しています。 以下のソースは Learn You a Haskell for Great Good! / 9 Input and Output / Exceptions を基に入力したファイルが存在しなかった場合はリトライするように書いたつもでした。 import Syst…

Haskell から MultiByteToWideChar を呼び ShiftJIS←→UTF16 変換する

Windows のターミナルでは SJIS の文字以外は文字化けすることから、Windows で Haskellを使う場合は常にSJISへの変換が必要になります。 Windowsは内部ではユニコード(UTF16)が使われています。ユーザが実際に触れるのは ShiftJIS ですから、Windowsはには…

Cinnamon で半角カナを全角カナに変換したくない場合は直接 nkf を呼び出す。

Windows環境でHaskell を使っています。文字コード変換にはCinnamonを重宝に使っています。 Cinnamonは内部で nkf を使用しています。半角カナを変換しないでそのままにするには nkf のオプションに x を含めなければならないのですが、Cinnamonでは指定され…

unsafePerformIO を使って IO を外す

■ Haskell 再入門Haskell(前編)に unsafePerformIO を使って IO を外す例がありましたので写経してみました。 import System.IO.Unsafe configFileName = "config.txt" loadConfig :: IO (String,Integer) loadConfig = readFile configFileName >>= \dat ->…

USC4 ←→UTF8 変換を調べてみました。

Haskell の内部ではUSC4を使用しています。 UTF8 に変換するには以下のテーブルにより行います。 <http://www.ietf.org/rfc/rfc2279.txt> UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0000 007F 0xxxxxxx 0000 0080-0000 07FF 110xxxxx 10xxxxxx 0000 0800-0000 FFFF 1110xxxx 10</http://www.ietf.org/rfc/rfc2279.txt>…

Haskell で PostgreSQL のドライバを書く

Haskell で PostgreSQL のドライバを書いてみました。C を使わないでも出来ました。 参考にしたところ PostgreSQL 文書 / IV. クライアントインタフェース / 第 31章libpq - C ライブラリ PostgreSQLで作るLinuxデータベース(3)PostgreSQLをプログラムで操…