The Dabsong Conshirtoe

技術系の話を主にします。

haskellの勉強として、twitter apiライブラリを書いてみた

すごいH本をひと通り読んだので次は自分でコードを書いてみようと思い、Twitter APIのライブラリを適当な感じで書いてみました。

Attsun1031/birdwatcher · GitHub

使い方

import Web.Birdwatcher

main = do
  user <- users_show [("screen_name", "__Attsun__")]
  putStrLn $ show user

感想

  • モナドむずい
  • Aesonが便利(型クラスの仕組みのおかげ?)
  • ライブラリコードを読んだりcabalを設定したりするのに時間を多く使ってしまったので、使った時間の割にはコード量が少なかった。

レコードのアクセサ関数で困った

レコードとは以下の様な構造体のようなもの。

data Point = Pt {x :: Integer, y :: Integer}

レコードを定義すると、フィールドへのアクセサ関数x, yが自動的に定義されるわけだけど、アクセサ関数の名前がだぶってしまうので同じ名前のフィールド名を持つレコードを同じ名前空間に複数おけない。

例えば自分の作ったライブラリの場合、UsersShowとUserTimelineのどちらにもidという名前があるため同じ名前空間におけない。とりあえずmoduleを分けるという手で対処しているが、分けたくないってケースもあるだろうし、どうやってやりくりするんだろ?