Haskellの練習でGithubのリポジトリに対するpushEventをまとめて出力するツールを書いてみた

最近、有志数名で、すごい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で書いたら、もっとすぐ終わっただろうな・・・。結構楽しかったからいいけど。