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

wxHaskell を使ってみる(2)

以下を参考にしました。 wxWidgets Reference manual : どんなライブラリがあるか調べるのに役立ちます。 Documentation for wxHaskell 0.10.3 : wxwidget のHaskell での定義。 Index of /wxhaskell/samples/wx : サンプル。 WxHaskell/Quick start WxHaske…

wxHaskell を使ってみる。

サンプルをゴニョゴニョいじってみる。 (:=) でプロパティをセット。 module Main where import Graphics.UI.WX main :: IO () main = start hello hello :: IO () hello = do f <- frame [text := "日本語はUTF8で!"] p <- panel f [] title <- get f text …

wxHaskell をインストールする

「Real World Haskell」は Gtk2hs を紹介していますが wxHaskell は移植性が高く、ネイティブAPIを呼んでいますから綺麗で、パーツも豊富そうです。 wxWidgets については「wxWidgets でクロスプラットフォーム GUIアプリを作ろう」に詳しく記述されています…

The main function `main' is not exported by module `Main'

「Real World Haskell」読書メモ 4.ライブラリを書く 5.5Haskellプログラムの生成、およびモジュールのインポート -- file: ch05/SimpleJSON.hs module SimpleJSON ( JValue(..) , getString , getInt , getDouble , getBool , getObject , getArray , isNul…

安定ソート

安定なソート(stable sort)とは、 順序的に同等な要素が複数あったときに、その並びが元のまま保たれるもののことを言います。 ソート概要(アルゴリズムとデータ構造) 例えば、個人データを認識するための番号順に並べ、さらに組別に並べても、組ごとに認…

「Real World Haskell」読書メモ(117) 4.ライブラリを書く 5.2 HaskellにおけるJSONデータ表現

-- SimpleJSON.hs data JValue = JString String | JNumber Double | JBool Bool | JNull | JObject [(String, JValue)] | JArray [JValue] deriving (Eq, Ord, Show) Main> :t JString "foo" -- JString "foo"の型はJValue JString "foo" :: JValue Main> :…

「Real World Haskell」読書メモ 4.関数プログラミング 4.12 スペースリークと正格評価

Haskell は遅延評価のために式を展開して計算しないままサンクとしてスタックに保持しています。 下のfoldl (+) 0 (1:2:3:[])を正格評価すれば(0 + 1)の結果である1を保持するのですがそうはしません。 foldl (+) 0 (1:2:3:[]) == foldl (+) (0 + 1) (2:3:[]…

Haskell で SJIS 文字列

Haskell のソースコードにUTF8以外の日本語を記入するとコンパイル時にエラーになります。(コメントはOK) UTF8の日本語を出力するときも、そのままでは出力できず、 utf8-string パッケージをインストールして System.IO.UTF8のputStrLnなどを使用しなけれ…

cabal.exe: user error (Codec.Compression.Zlib: premature end of compressed stream)

Haskell をバージョンアップし、 cabal update を行うと以下のエラーになった。 > cabal update Downloading package list from server 'http://hackage.haskell.org/packages/archive' cabal.exe: user error (Codec.Compression.Zlib: premature end of co…

FFI を学ぶ(3) : 自前のCで書いたCOM で MS-Access、SQL server にアクセスする。

小さいMDBですが、10000回連続読み込みでもOKでした。 XP では正常に動作するが、VISTAではSEGV になった。 XP ではmalloc して LSICD の値を保持しているので ((IDispatch *)pDisp)->lpVtbl->Release( (void *)pDisp) で開放したあと free(pDisp) していた…

FFI を学ぶ(2) : Cの関数とデータをやりとりしてみる。

ffi.c : C側のメモリは Haskell で確保してのを受け取って使うか、malloc で確保して開放する関数を Haskell から呼べば良い、たぶん。 勿論、C で開放できるならその方が楽です。 #include <stdio.h> #include <windows.h> #include <malloc.h> #include <objbase.h> /* CLSID構造体へのポインタを返</objbase.h></malloc.h></windows.h></stdio.h>…

FFI を学ぶ(1) :初めての Foreign Function Interface (FFI)

Haskell からは C の関数が呼べます。 {-# OPTIONS -fglasgow-exts #-} import Foreign import Foreign.C.String import Foreign.C.Types import System.IO.Unsafe (unsafePerformIO) foreign import ccall "math.h sin" c_sin :: Double -> Double foreign …

COM を学ぶ(5) : Mingw で MS-Access,SQL server に接続

COM C

小さい mdb ですけど 10000回連続読み込んでも、メモリ消費は増えませんでした。 参考にしたところ。 Win32OLE 製作過程の雑記 Ruby win32ole.c 「るびま」連載:Win32OLE 活用法 C++ アプリケーションではなく C アプリケーションからOLE オートメーション…