ログ日記

作業ログと日記とメモ

Haskell

haskell-language-server の設定2

https://n314.hatenablog.com/entry/2021/07/24/173834 の続き。「emacs lsp-mode "disconnected"」で検索した https://github.com/emacs-lsp/lsp-mode/issues/905 ここのコメントに M-x lsp してログを見ろと書いていたので、そのようにする。 lsp-haskell …

関数型プログラミングの考え方を理解するための昔の記事

この前 関数型プログラミングはまずは純粋関数型言語を用いて、考え方から理解しよう 関数型プログラミングはまず考え方から理解しよう - Qiita ここを読んだ。 関数型プログラミングの考えを学ぶには、純粋関数型言語で学ぶべきである これは同意なんだけど…

haskell-language-server の設定の途中

https://n314.hatenablog.com/entry/2021/07/20/203555 の続き。 https://haskell.e-bigmoon.com/hie/emacs.html https://haskell.e-bigmoon.com/posts/2020/07-12-haskell-language-server.html git clone https://github.com/haskell/haskell-language-ser…

StackでHaskellの環境を作れなかったログ

今のPCにGHCが無かったので入れた。 どうやって環境を作ったのか忘れていて、どこかに書いた気がするけど見つからないのでメモ。 うーん…stackの一通りの使い方とか、前にも書いた気がするんだが…。GHCJSのことを書いて肝心のGHCのことは書いてなかった? su…

圏論入門 Haskellで計算する具体例から 読んでる

やっと15ページまで読んだ。 1ヶ月前に買ったのに全然進んでいない。 267ページまである。 先は長い。www.amazon.co.jpAmazonのレビューは良くないみたい。 でも数学の基礎が無い自分は読みやすい。今のところ、と言ってもたった15ページだけど、暗黙の了解…

頭の体操

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とかにしたかったんだけど、上は演算子が並んでるからかパースエラーになって、下は演算子を関数に変換してるからダメっぽい。 引数が増えていった場合とか…