Haskell雑感

以前clojureで作成した自分用WebアプリをHaskell(GHC)で作ってみている。感じた点を並べてみる。

言語としての違い

ソースの単純な見た目としてはclojureの方が自分好み。Haskellの方は"$, ->, ., <-, !"といった記号が乱発され、とにかく読む気が失せる。しかも一目見ただけでは関数の適用順さえ理解しにくい。Lispライクな文法にしなかったのはHaskellの一番いけてない点だと主張したい。

case all of
[] -> res
(x:rs) -> case Data.Map.lookup (qname x) res of
Nothing -> formatByKamoku' rs $ insert (qname x) ((V.replicate 12 0) V.// [((month x)-1, cost x)]) res
Just v -> formatByKamoku' rs $ insert (qname ...

more…

fleet (clojureによるテンプレートシステム)

また久しぶりにclojureをいじり始めた。またWebシステムの実装に用いる予定。どうやってJSPやASPのように動的にWebページを生成するのが良いのか、最近の流行を少し調べてみた。

結果として、自分にはfleetが現状良さそうという結論に達した。若干悩んだ点と調べて分かったことのメモ。

  • fleet-nsでテンプレートを生成するときに、引数で指定したディレクトリにあるファイルを 走査して、それぞれのテンプレートファイルに対応するテンプレート関数が作られる。例えば、post.html.fleetというファイルが存在すれば、postという関数が、(同じく引数で指定した名前空間に)作られる。
  • post関数の内部(つまり、テンプレートファイルの中)では、dataという名前でテンプレート関数への実引数を参照できる。すなわち、<(:hoge data)>とpost.html.fleetに記述すれば、このテンプレート関数が実行されるときに、実引数として渡されたmapにあるhogeキーの値を出力する。

more…