2013-01-01から1年間の記事一覧
Windows 8.1にGHCの環境を構築しているのですが、 GHCi runtime linker: fatal error: I found a duplicate definition for symbol というエラーが出るようになってしまいました。エラー・メッセージで検索したサイトのひとつに次のサイトがありました。GHCi…
ITプロに「本物のプログラマはHaskellを使う」が連載されていますが、今回の記事はは「第58回 Cの配列をHaskellで利用する」です。丁度配列を使いたいところでした。しかし、Array 型は、参照は O(1) で出来ますが、 更新には O(n) かかります。 そこで、記…
Foreign.Marshal.UtilsのwithはC の関数への引数をポインタ渡しするときに使う。 -- ghc --make -Wall frexp.hs test.c -o frex {-# LANGUAGE ForeignFunctionInterface #-} import Foreign.Ptr import Foreign.C.Types import Foreign.Marshal.Utils foreig…
Data.HashTableを使おうとすると hashtables パッケージを使えというメッセージがありましたのでインストールしてみました。 Announcing: "hashtables", a new Haskell library for fast mutable hash tables hashtables とhashableをインストール。 hashtab…
定義ファイルで元号名、元号が使用開始された西暦年月日、最終西暦年月日を定義ファイルから読み込みます。 代数的データ型のアクセサを使うと可読性が悪くなるので、パターンマッチにより取り出す方法を使うようになりました。 module Main where import Da…
wxHaskell で HaskellをVBのように使いたい、そう思って来たのですが、公開されている情報が少ないです。F#の選択枝もありますが、いつか業務に使っているソフトをOSに依存しないものにしたいと言う望みがあります。さて、今回はGrid。 Gridは表現力があって…
必要なので半角カナ文字を含む文字列を全角文字列に変換する関数を書きました。 半角文字のUCS4コードはSJISと同じ順序で並んでいますので、半角文字をそのまま配列の添え字に使って全角文字を取得しています。まず、listArrayで半角カナ文字コードと同じ順…
とりあえず、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 で HWND を取得する方法が分からず、WIN32APIを呼ぼうとしましたが、うまくいきませんでした。wxHaskell で HWND をとる方法を見つけてwxHaskell で出来るのを知りました。 ボタンを押すたびにIMEのオン、オフ状態が切り替わります。「英数…
タイトルは釣りです。副作用を起こしているのはHaskellから読んでいるCのライブラリです。 Win32 APIのWideCharToMultiByte、MultiByteToWideCharでUTF-16 ⇔ Shift-JIS 変換を行うには変換結果を格納するバッファを確保してそのポインタを引数に渡し、そのバ…
以前、Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って UTF-16 ⇔ Shift-JIS 変換するコードを書きましたが、コードの一部にCで記述した部分があります。本当はCを全く使わないでHaskellで書きたかったのですが問題があって出来ませんでした。…
shiftJisからUtf16、Utf16からshiftJisへの変換では、変換した後にpeekCString、peekCWString関数によってC文字列からHaskell文字列を作ります。C文字列はHaskell文字列返す前にメモリを解放しているのですが、ふとポインタで指している領域が消えると返す値…
UTF-16 ⇔ Shift-JIS の変換は計算によって行うことが出来ません。 そこで Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って変換します。 shiftJisToUtf16 Haskell 文字列をWindowsワイド文字列に変換したあとにワイド文字列からpeekCWStringでH…
Data.List に unfoldr という関数が定義されています。どういう使い道なのだろうと思ったのですが、数を2進数文字列に変換できるのではないかと思いやってみました。 Data.Listの例 --A simple use of unfoldr: unfoldr (\b -> if b == 0 then Nothing else …
IBM developerWorks:Unicodeエンコード方式 UTF-8、UTF-16、およびUTF-32間の相互運用方法を参考にUTF-32 ⇔UTF-16変換関数を作ってみました。 Windows COMの内部文字コードはUTF-16を使っています。 一方、HaskellはソースコードはUTF-8で書きますが内部では…
OverloadedStrings 言語拡張を使うとダブルクオートで囲んだ文字列を、Text、ByteString リテラルとして扱ってくれるようになります。あどけない話・Haskellライブラリ入門 (2011年版) {-# LANGUAGE OverloadedStrings #-} module Main where import qualifi…
とほほのWWW入門/ 漢字コードについて(各コード間の変換アルゴリズム)を参考にEUC-JPからShift-JISへ変換します。 ASCII このアルゴリズムは全角文字のEUC-JP ⇔Shift_JIS 変換です。ASCIIについては変化ありませんのでそのままリストに追加していきます。 半…
Data.Foldable これはData.Foldableにある例ですが、Tree型のFoldableインスタンスを定義することによってFoldableに定義されている関数を使用できるようになります。 Foldableインスタンスを定義するには、foldMap またはfoldrを定義すれば良いらしい。 imp…
maxBound、minBound は出力する型を指定するをその型が表現できる最大値、最小値を出力します。 > maxBound::Char -->'\1114111' > maxBound::Int --> 2147483647 > minBound::Char -->'\NUL' > minBound::Int --> -2147483648 これと同じように自分でも出力…
実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう・JavaScriptでHaskellを実装!?をRubyで写経してみます。 Thunk、 Lambda、App、Evaluateクラスは instance_of? により型を調べるためのものです。 Thunk でくるんである以外は lambda から…