ふつうの Haskell プログラミング一応読了

さくさく読めてわかりやすかったです。でも、中身を理解したかどうか……。というか、じゃあ何か Haskell で書いて、って言われても書けないなあ。

Haskell を知ることを通じてレベルアップ以前に、プログラムの設計とか全然できない人なんで、Wiki の実装のところが(Haskell とは関係なく)一番役に立った気がする。Web アプリケーションってそうやって書くんだーという。


Parsec も、BNF ってどうやって書くの?って感じで、かなり頑張らないとふつうのプログラマにはなれないんだなあと思った。



以下はそういう虫けらの戯言です。


http://alohakun.blog7.fc2.com/blog-entry-451.html#comment

ここの、reverse 使わない遅延評価バリバリ版 tail は参考になりました。つーかあんなかっこいいコードがかけるようになる日はくるんだろうか。


fold は、再帰になるなあーと思ったので、末尾再帰を意識して

split :: Int -> String -> [String]
split n cs = split' [] $ splitAt n cs
  where
    split' :: [String] -> (String, String) -> [String]
    split' l (cs, "") = reverse (cs:l)
    split' l (csf, css) = split' (csf:l) $ splitAt n css

こういうコードを書いたんですが、haskell では末尾再帰って意味ないんでしょうか?コールスタックがないから関係ないのかな。まあそもそも reverse とかしてる時点でプギャーって感じですが。この問いに付いては巻末の解答みて、"はぁ、きれいだなあ"とため息が出た。


モナドも、与えられたものを使うだけならまあ頑張ればできそうだけど、自分で必要なときに作れるかというと多分できない。


なんか、Haskell ってのは、言語そのものが、フレームワークみたいだと思った。いや、別にそうでもないかな。