椿の日記

たぶんプログラムの話をします

haskellの変数に付けるコーディング規約とか

実際にHaskellでアプリを書いていて気になりはじめたんだけど、色んなものの命名規則を決めておかないとコード書くたびに悩んでしまって駄目ですね。

Haskellはxだのxsだの短い変数をつけるのが慣習みたいですが自分はそういう命名が嫌いなので長い名前を付けます。郷に従えとは言うけど、どうもこれは受け入れられんなあ…。

あと代数的データ型のラベル名がそのままモジュール全体のスコープで関数化されるんで安易にnameとかいうフィールドを付けたりすると偉い目に合います。例えば

代数的データ型の要素をローカル変数に移すときに同じ名前は使えない

  data Hoge = Hoge { name :: String }
  let hoge = Hoge "asdf"
  let name = name hoge

仮に出来たとしても意味不明なのでやりませんが…

複数の代数的データ形で同じフィールド名を作れない

  data A = A { name :: String }
  data B = B { name :: String }

これもできません。まあモジュール分ければ出来なくはないのですが、結局どちらも同時に扱う場合に衝突回避するためにimportで指定しなきゃなりません。それなら予めグローバルにユニークな名前を付けたいところ。

こういう問題を避けるベストプラクティスってどんなのになるんだろう?