wxHaskellのGridでデータをチェックボックス、数字、Choiceにより編集、表示する。

wxHaskell で HaskellをVBのように使いたい、そう思って来たのですが、公開されている情報が少ないです。F#の選択枝もありますが、いつか業務に使っているソフトをOSに依存しないものにしたいと言う望みがあります。さて、今回はGrid。 Gridは表現力があって…

Data.Array を使った半角カナ文字の全角文字列変換。

必要なので半角カナ文字を含む文字列を全角文字列に変換する関数を書きました。 半角文字のUCS4コードはSJISと同じ順序で並んでいますので、半角文字をそのまま配列の添え字に使って全角文字を取得しています。まず、listArrayで半角カナ文字コードと同じ順…

Monoid の使い道が思い浮かびません・・・

とりあえず、Nil と Cons によるリストでmemptyとmappendを定義してみましたが、元々Haskell のリストはMonoidなので意味がありません。 import Data.Monoid data List a = Nil | Cons a (List a) deriving(Show) instance Monoid (List a) where mempty = N…

wxHaskell で IME を制御する。(WIN32API)

最初、wxHaskell で HWND を取得する方法が分からず、WIN32APIを呼ぼうとしましたが、うまくいきませんでした。wxHaskell で HWND をとる方法を見つけてwxHaskell で出来るのを知りました。 ボタンを押すたびにIMEのオン、オフ状態が切り替わります。「英数…

Haskellで副作用を起こす(Win32 API によるUTF-16 ⇔ Shift-JIS 変換)

タイトルは釣りです。副作用を起こしているのはHaskellから読んでいるCのライブラリです。 Win32 APIのWideCharToMultiByte、MultiByteToWideCharでUTF-16 ⇔ Shift-JIS 変換を行うには変換結果を格納するバッファを確保してそのポインタを引数に渡し、そのバ…

Foreign.Marshal.Alloc.malloc、Foreign.Storable.peek、pokeを使ってみる。

以前、Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って UTF-16 ⇔ Shift-JIS 変換するコードを書きましたが、コードの一部にCで記述した部分があります。本当はCを全く使わないでHaskellで書きたかったのですが問題があって出来ませんでした。…

peekCStringでHaskell文字列を作った後はC文字列が書き換えられてもHaskell文字列に影響はない

shiftJisからUtf16、Utf16からshiftJisへの変換では、変換した後にpeekCString、peekCWString関数によってC文字列からHaskell文字列を作ります。C文字列はHaskell文字列返す前にメモリを解放しているのですが、ふとポインタで指している領域が消えると返す値…

Win32 API の WideCharToMultiByteを使って UTF-16 ⇔ Shift-JIS 変換する。

UTF-16 ⇔ Shift-JIS の変換は計算によって行うことが出来ません。 そこで Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って変換します。 shiftJisToUtf16 Haskell 文字列をWindowsワイド文字列に変換したあとにワイド文字列からpeekCWStringでH…

unfoldr を使って2進数文字列を作る

Data.List に unfoldr という関数が定義されています。どういう使い道なのだろうと思ったのですが、数を2進数文字列に変換できるのではないかと思いやってみました。 Data.Listの例 --A simple use of unfoldr: unfoldr (\b -> if b == 0 then Nothing else …

Haskellで文字列を UTF-32 ⇔UTF-16 変換する。

IBM developerWorks:Unicodeエンコード方式 UTF-8、UTF-16、およびUTF-32間の相互運用方法を参考にUTF-32 ⇔UTF-16変換関数を作ってみました。 Windows COMの内部文字コードはUTF-16を使っています。 一方、HaskellはソースコードはUTF-8で書きますが内部では…