ログ日記

作業ログと日記とメモ

Haskell

頭の体操

CodeIQ ホリエモンからの挑戦状 https://codeiq.jp/magazine/2015/07/26213/ 何故か体調を崩して頭ふらふらのときに解説編の記事を見てHaskellでコードを書いていたので記念メモ。 module Main where import Control.Applicative import Data.Set (fromList,…

persistentで自動生成されたコードを見る

Template Haskellで生成されたコードを見る手順メモ。 http://www.yesodweb.com/book/persistent ここのサンプルをファイルに保存する。分かりやすいようにpersistの定義は別関数にする。 runPersist = [persist| Person name String nick String age Int Ma…

yesod のリロード機能を再実装する

昨日 *1 はYesodからファイルを持ってきたが、ここでしていることは関連ファイルを監視して変更があればrunghcを実行するというもの。 何をやっているのかを理解するために、リロードする部分だけ抜き出して写経した。 yesod のコードから cabal を使わない…

Yesod の 動的リロードの仕組みだけ利用する

wai-handler-devel がエラーでインストールできない。 どうやら削除された Network.Wai.Middleware.Debug を参照している模様。 https://github.com/yesodweb/wai/issues/25 https://github.com/yesodweb/wai/blob/master/wai-handler-devel/Network/Wai/Han…

Debian に yesod を入れる

使っているマシンがsqueezeでghcのバージョンが古くてcabalがエラーを吐いたので、GHC7とHaskell-Platformのソースをダウンロードする。 http://www.haskell.org/ghc/download_ghc_7_0_4 http://hackage.haskell.org/platform/linux.html まずHaskell Platfo…

Haskell + wxWigetsでXRCを使う

ひとまず、 http://0xcc.net/pub/uu-2004-08/ ここの通りにwxgladeを使ってウィンドウを作る。 そしてGenerate codeでXRCを選んで保存。 テストコードを書く。 import Graphics.UI.WX import Graphics.UI.WXCore main :: IO () main = start win win :: IO (…

Webページごとのアクション関数

PHPなどのアクションクラスやアクションメソッドの場合、アクションを実行する関数はRequestsオブジェクトを受け取ってResultsオブジェクトを返すように作っていた。 Haskellの型で書くと ... data Results = [Result] type Act = Requests -> Results のよ…

HaskellのWeb用フレームワークを書いている

実用性は不明だけれどとりあえずアップ。 Cabalはちょっとめんどくさそうなのでgithubに。 http://github.com/nishimura/Yanagi まだ仕様が固まっていないしHaskellをやり始めたところなのでコードは汚い…。 今のところ Flexyっぽいテンプレートエンジン *1 …

WebからHDBCを使ってSqliteに書き込む場合のエラー

ハマった。 エラーメッセージは unable to open database fileで、単純にディレクトリの書き込み権限の問題だったわけだけれど、このエラーメッセージを出すまでがハマった。 HDBCのrun関数では SQL logic error or missing databaseというエラーだけ表示さ…

Haskellでの文字コードの扱い方が分かってきた

encodeString は Haskellの内部エンコーディングの文字列を UTF-8 に変換する。 decodeString は UTF-8 の文字列をHaskellの内部エンコーディングに変換する。 http://blog.kfish.org/2007/10/survey-haskell-unicode-support.html しかしUTF-8のコマンドプ…

Haskellでメール送信

Google グループ メールは HaskellNet を使うといいよ、と書かれている。 Author Jun Mukai って入門Haskellの著者かな? cabal install iconv --global cabal install HaskellNet --globalソースをDLしてきて example/smtp.hs の通りにすれば英語のメールは…

Haskellでデータベース操作

ぐぐったら2006年の自分の日記がヒットしてしまった…。あの頃から特に進展がないことに落ち込みつつ。 haskelldbは、haskelldb-hdbc、haskelldb-hsql、があって、それぞれHDBC、hsqlなどと関連している? haskelldbのバージョンは0.13なのでちょっと躊躇する…

WindowsでSDLとhsSDLをインストール

昨日入れたけどエラーが出てたので再インストールしてみた。 取り敢えずMsys上に展開した。 cd /local tar xvzf SDL-devel-1.2.14-mingw32.tar.gz cd SDL-1.2.14 make nativeWindowsのPATHに C:\msys\1.0\local\SDL-1.2.14\bin を追加。 hsSDLを入れる。 tar…

やっとWindowsでHaskellからwxWidgetsが動くようになった

Cygwinは諦めてMsys上でコンパイルした。 一般的なことは http://wiki.wxwidgets.org/Compiling_WxWidgets_With_MSYS-MinGW ここに載っているが、別のやり方をする。 まずMinGWとMsysをインストールする。 wxMSW-2.8.11-Setup.exe をダウンロードして、Msys…

wxWidgetを入れたり

debianのlennyだとghcが6.8なので色々不都合が起こる。 一時的にsources.listのlennyをsqueezeに変更してghc関連だけ入れてやっつけ解決。 あとはsources.listを戻してwxWidgetのダウンロードページでDebian用の設定に従ってインストール。 そしてcabal inst…

SDLを入れる

結局Haskell Platformはアンインストールして、ghc6.8.3をインストールした。 http://www.haskell.org/ghc/download_ghc_683.html wget http://www.haskell.org/cabal/release/cabal-install-0.8.2/cabal-install-0.8.2.tar.gz tar xvzf cabal-install-0.8.2…

Msysを入れた

続き。 まだ途中。 wx-configは直接起動できるバイナリじゃないとダメっぽいので #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { int i; char cmd[256]; strcpy(cmd, "D:\\cygwin\\usr\\local\\msys\\1.0\\bin\\bash -i -c \"PATH=/bin D:/cygwin/</string.h></stdlib.h>…

Cygwin、SDL

うまくいかない。 $ runhaskell Setup.lhs configure --extra-include-dirs="D:\cygwin\usr\include\SDL" \ --extra-lib-dirs="D:\cygwin\lib"http://web.animal-machine.com:8080/blog/2010/04/a-haskell-adventure-in-windows/ ここのコメントのようなエラ…

PHPのクラスをextensionで構造体に変換してHaskellで操作する

http://d.hatena.ne.jp/n314/20090919/1253353885 の続き。 動作確認まで point/ /point2.xml /hs/ /point2/ point2.xmlを書いてひな形生成。 <extension name="point2" version="1.1.2"> <function role="internal" name="MINIT"> <code> </code> </function> </extension>

CodeGen_PECLとHaskellを使ってクラスを操作するExtensionを作る

http://d.hatena.ne.jp/n314/20090918/1253256703 の続き。 CodeGen_PECLをインストール。 pear install -a CodeGen_PECL作業ディレクトリ作成。 mkdir point cd point mkdir hs Haskellのコードを書いてコンパイル。 cd hs emacs point.hsmodule PhpPoint w…

PHPのextensionでHaskellを呼び出す

ソースをダウンロード。 apt-get source php5 cd php5-5.2.0+dfsg/ext ./ext_skel --extname=haskelltest cd haskelltest/comfig.m4 のコメント解除。 PHP_ARG_ENABLE(haskelltest, whether to enable haskelltest support, Make sure that the comment is a…

CからHaskellを使う

C言語?C++はどうなんだろう・・取り敢えず動くところまでやってみた。 昔作ったwiki http://www.n314.com/Haskell/wiki/ をCから呼び出してみる。 import CGI import Qwiky import Config main = do cfg <- loadConfig "config.ini" runCGI $ quwiky cfg Ma…

遅延評価とか

同じ引数で実行された関数は同じ結果を返す。 この「同じ引数」ってどういうことだろう。 f1 a b = a + b ここで f2 = f1 2 3 f3 = f4 2 3 where f4 a b = f1 a b とした場合、f3はf4からf1を呼んでおり、a と b の実態が何であるかは + 演算をしたときに初…

関数合成演算子

.の扱いが分からない・・。 コメントを貰ったんだけどぱっと見で動きが理解できなかった。 f :: (b -> c) -> (a -> b) -> a -> c f g h = g . h f :: (b -> c) -> (a1 -> a -> b) -> a1 -> a -> c f g h = (g .) . h f :: (b -> c) -> (a2 -> a1 -> a -> b)…

頭の中で出来ると思ってたけど出来なかった・・

-- f a b = g $ h a b -- f a = g . h a f = (.) g . hこれをさ f = (g . .) hとか f = (g . (.)) hとかにしたかったんだけど、上は演算子が並んでるからかパースエラーになって、下は演算子を関数に変換してるからダメっぽい。 引数が増えていった場合とか…

配列とかカリー化とか

Haskellで二次元配列はどうするんだろう? 散々悩んで Array Int (Array Int a)は効率悪いしなぁ・・とか考えてたら scat.rb:ERROR 何もInt型にしなくても、配列のインデックスそのものを多次元にすればいいだけのことか・・。 type MyArray = Array Point a…

モナドが難しい・・

はてなみたいに :titleと書いたらタイトルを取ってくるように、という処理の仕方は分かった。 しかし・・パーサの中でtitleを見つけたらネットワーク処理をして・・ってやると戻り値にIOがついてしまう。 どうすればいいか全く分からない・・。ネットワーク…

wiki

http://www.n314.com/Haskell/wiki/ はてな記法のpreを採用してみた。 パーサが何となく分かってきた。まだ何となく・・。 普通の文章をパース中にリストとか表示するために中断する方法がまだ無駄なことやってるかも。 type WikiParser a = GenParser Strin…

パーサの修正メモ

下のソース。 breakStringのところは、ただの文字列をチェックしてるんだからリストにしてどれか一つにマッチしたらエラーにすべきところだった。 明日直そう。

モナドの考え方

メモ HaskellのモナドIO - HaHaHa!(old) - haskell