Template Haskellって使ったことないなぁ

この前の三島Haskell無名関数の会でTemplate Haskellの話が出たけど僕は殆ど使ったことないなぁと。

Yesod使うと多用するようになるのかな?

openbabelみたいなライブラリにHaskellにあれば、化学反応を行うDSLを書いてみたいと思うんだけど。

それから HSOEが読みかけだったのを思い出したので再開しよう。

ProductName The Haskell School of Expression: Learning Functional Programming through Multimedia
Professor Paul Hudak
Cambridge University Press / 3963円 ( 2000-06 )


三島Haskell無名関数の会面白かった

みんなHaskell好きですね。

次回はネタを持ち寄り勉強会形式でやりましょう。

Yesod面白そうだな。nexus7がきたらepub買ってみよう

ProductName Developing Web Applications With Haskell and Yesod
Michael Snoyman
Oreilly & Associates Inc / 2805円 ( 2012-05-04 )


三島Haskell無名関数の会

主催者がHaskellerではないので「三島Haskell無名関数の会」と銘打ってますが、正確には三島λerの会です(嘘です)。

というわけで、Haskell (とPython)でおおいに盛り上がりましょう。

λ.ΣπとかいうHaskellとPythonを主軸にした地域コミュニティでもつくるかっていう話をしてこようっと。

HakyllでShizudevつくる会のサイトをつくってみた

@motimuneとコミュニティfで会う用があったので、ついでに黙々とHakyllでサイトをつくってみた。

shizudev make

Hakyllは面白いがデプロイがめんどくさかったので、HakyllでGitHubのProject PagesのHTMLを作るみたいにデプロイ用の設定をしないといけないなぁと思った。

あとHakyllで黙々したい(よね?)

JekyllかHydeかHakyllかはたまたObrazか

GitHub Pagesを管理するのに、Jekyllっぽいstatic site generatorを探している。ついでに、さくっと開発するためのボイラープレートとかTipsとかも知りたいんだけど、僕の観測範囲では見つけることができなかった。

やっぱ、Siteのデザイン眺めて、ヨサゲなサイトのデザインとかCSSとかを参考にして自分用テンプレートを作って管理するしかないのかなぁ。

twitter bootstrapは便利なんだけど、twitter bootstrap臭が消えないよね(モバイルで見やすいので気に入っているんだけど)。もう少しミニマルなtwitter bootstrapの作り方みたいなのも知りたいなぁ。

Jekyll

JekyllはRuby製で日本語の情報も結構ある。

来月GitHubのハンズオンやるから、Jekyllってその後のハンズオンネタとしてちょうどいいんじゃないか?と思って色々調べてたんだけど、結局HTMLとかCSSにいっちゃうみたいなんで、最初の方に書いたような感じになっている。

Hyde or Obraz

HydeはDjangoのテンプレートエンジンとか使っているらしいんだけど、僕はJinja派なのでちょっと避けた。

最近、ObrazっていうテンプレートエンジンにJinja2を使っているstatic site generatorを見つけたので、こっち使ってみようかなぁと思っている。コードも500行未満らしいので一度読んでみようっと。

Hakyll

Haskell製のstatic site generator

Hakyll is a Haskell library for generating static sites, mostly aimed at small-to-medium sites and personal blogs. It is written in a very configurable way and uses an xmonad-like DSL for configuration.

Shizudevつくる会のgithub organizationsのサイトはこれを使ってみようと思っている。なぜなら、静岡東部にはHaskellerが3人以上存在するからだ。これは人口比率から考えてもそこそこ高いのではないかと思っているがどうなんだろ?

それから「静岡県の形は世界的にも有名なプログラム言語Haskellのロゴマークである「λ(ラムダ)」に似ているからね。

というわけで、いまはHakyllを使ってみようかなぁと考えている。誰か今度のつくる会で黙々してみませんか?

切れ味鋭いPython版underscore.js(knife)

まぁ、僕はSpine派なのであんまりunderscore.jsにそそられないんだけど、knifeってのを見つけたのでちょっと触ってみた。

>>> __(1,2,3,4,5).append(6).append(7).undo(1).peek()
[1, 2, 3, 4, 5, 6]

reduceというかfold系

>>> __(1, 2, 3).worker(lambda x, y: x + y).reduce()
knife.lazy.lazyknife ([IN: ([1, 2, 3]) => WORK: ([]) => HOLD: ([]) => OUT: ([6])]) 
>>> __(1, 2, 3).worker(lambda x, y: x + y).reduce().get()
6

覚えれば短くかけて便利なんだろうけど、覚えたらHaskellとかSchemeとかの構文とバッティングして混乱しそう。

reduceの例はHaskellだったら

Prelude> foldl1 (+) [1,2,3]
6

でいいので、OOPな感じにすると面倒くさそうに感じるかなぁ。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


Haskell版virtualenv (virthualenv)

最近Haskellばっかり書いているんだけど、パッケージの依存性に悩まされることが多い。

やっぱサンドボックス化できるほうがいいよねーと探したらPythonのvirtualenvインスパイアなvirthualenvがあった。いまはhsenvって名前が変わって開発されているようだけど、hackageに登録されてないようなのでvirthualenvを入れておく

cabal install virthualenv

使い方はvirtualenvと大体一緒

mkdir /tmp/anydbmTest
cd /tmp/anydbmTest
virthualenv

すると.virthualenvに色々設定されるのでactivateコマンドで仮想環境に入る

source .virthualenv/bin/activate
cabal install anydbm

hakyllとバッティングしていてインストールできなかったanydbm(MissingH)が入るのでPLEAC14章を解けるようになった。

仮想環境はdeactivateで抜けられて、要らなくなったらディレクトリを消せばいいので、ちょっと試したいパッケージを気軽に試せて良い感じ(まさにPythonで開発している気分)。

virthualenvwrapperがあればさらにいいんだけどね。

追記 121223

mkvirthualenvを書いてみたら快適になった。

HaskellのコードをJavascriptにコンパイルするfayが面白い

Fay programming language

インストールは簡単

cabal update
cabal install fay

フィボナッチなコードをjavascriptにコンパイルしてみる。printを自分で定義する必要があってはまった。

fib 0 = 1
fib 1 = 1
fib n = fib (n-2) + fib (n-1)

print :: Foreign a => a -> Fay ()
print = foreignFay "console.log" ""

main = print $ fib 10

コンパイルのときにautorunオプションをつけるとmain関数がよばれるようになる

fay -autorun fib.hs

実行してみる

$ node fib.js 
89

まだバージョンが若いのでこれからに期待な感じだけど、Haskellでクライアントサイドのプログラミングができるようになるのは面白いかもしれない。

モナド変換子はボイラープレートの回避というかパターン

モナド変換子という小難しい名前がついていたので、ちょっと中身を見るのを避けていたのだけど、久しぶりにモナドのすべてを読んだら、第三部まですらすら読めて、モナド変換子って単なるパターンじゃないかと思えるようになった。モナドの合成ってめんどくさいのねって思った一方でHaskell楽しいじゃんって思った。

さらに勢いで、RWHの「作って理解するモナド変換子」も今読んだらわかりやすかった。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


モナド変換子を使ったプログラミングの強みと弱み

  • 純粋なコードとの干渉
  • 過度の順序付け
  • オーバーヘッド
  • インターフェースが大きすぎ

Haskellのレコード構文

レコード構文の話

data Test = TS {vars::[Int], others::[Int]} deriving Show

既にあるデータに対しても利用できて、もとのデータの値を一部だけ変更した新しいデータが作られる。

*Main> let ts = TS {vars=[], others=[1..10]}
*Main> ts
TS {vars = [], others = [1,2,3,4,5,6,7,8,9,10]}
*Main> ts {vars=[1,2,3]}
TS {vars = [1,2,3], others = [1,2,3,4,5,6,7,8,9,10]}

知らなかった。

それから、データコンストラクタが異なっていれば同じフィールド名を付けられる。

data AnotherTest = TS1 {vars::[Int], others::[Int]} 
                 | TS2 {vars::[Int], others::[Int]} 
                 deriving Show

othersを変更してみる

*Main> let ts1 = TS1{vars=[1..3],others=[]}
*Main> let ts2 = TS2{vars=[1..3],others=[]}
*Main> ts1 {others=[1]}
TS1 {vars = [1,2,3], others = [1]}
*Main> ts2 {others=[2]}
TS2 {vars = [1,2,3], others = [2]}