最近、有志数名で、すごいH本を元に毎週Haskellの勉強会をやってます。
まあ、読書して疑問に思ったことを報告し合ったり、簡単なコードを写経したり、
お題を見つけてきて、それを解くコードを書いてみたり、そんな感じ。
で、ちょうどGithubの複数のリポジトリにpushされたコミットをまとめて表示できるツールを作る機会があったので、
いい機会だと思い、Haskellで書いてみた。
仕事でプライベートなリポジトリを複数使ってるのですが、それぞれの詰まり具合とかが分かるように、
複数のプライベートリポジトリのpushEventをまとめて1ファイルにして一覧できるようにしたかった。
後、日付とかコミット者でフィルターかけたりとか。
joker1007/github-push-reporter
https://github.com/joker1007/github-push-reporter
やってることは単純で、API叩いてEventの中からpushEventだけ取り出してパースして、
Pandoc型に変換し、オプションに合わせて出力しているだけ。
pandoc様々である。
書いてみて、どうもIOモナドの中で冗長な書き方をしているような感覚が残った。
どういう型が入ってきて出力されるかのイメージがちゃんと出来てないような感じ。
aesonによるパースもなんか良く分かってねえw
多分、確実にもっとマシな形で書き直せるw
ただ、とりあえず書いてみるかーと思って、それなりにちゃんと出来たので、
少なくともレベル0からレベル1ぐらいにはなったかと思う。
cabalの作り方もある程度分かったし。
ある程度書いてみると、型のありがたさというのが非常に実感できる。
コンパイル時点で判別できる情報が非常に多いし、書き直す時も型から考えていけるのが楽だと感じた。
ゆるふわなRubyの対極とも言える厳格な型と純粋さを持つ言語ですが、
記述量はそれほどじゃないし、中々楽しい言語だと思います。
でも、Rubyで書いたら、もっとすぐ終わっただろうな・・・。結構楽しかったからいいけど。