大切なこと
ライブラリ
内部構造や操作は不用意に隠さず、あとで拡張・再利用できるようにする
cf Expression Problem, エクスポート, リファクタリング, 状態管理
Identity、Proxy、Const、Taggedなど、自明な構造を大切にする。インスタンスも怠らずに定義する
型クラスは則を大切に。則のないクラスを作らない。何でも型クラスで置き換えるのは抽象化ではない
ドキュメントを書く
インターフェイスの半端な抽象化は避ける。ハイレベルなAPIを提供するなら、必ずローレベルなものも用意しておく
孤児インスタンスを作らない
型
多相性を活用し、本質と無関係な操作をしないことを型で保証する(パラメトリシティ)
簡単な型エラーなのに原因が分からないのは疲労の証。糖分を補給したり休憩を取ったりしよう
設計
差し戻し: 状態と操作を記録し、再現可能にする(状態管理)
一般
目的に特化しすぎない。その時の目的には合っていても、仕様が変化すれば技術的負債と化す
古いアプローチに執着しない
不用意に流行りものを導入しない
面白いアプローチを見つけたら記録する
環境に依存せずに動くものを作る、あるいは環境を再現可能に保つ
効率の悪いものを避ける
特定のパラダイム(関数型、手続き型、オブジェクト指向)にこだわらない。Haskellなら状況によって使い分けられるし、名前がついていない手法にあふれている
並大抵の言語には真似できないようなテクニックを活用し、生産性で差をつける
コンパイラ
警告を無視しない
安易に+RTS -Nをつけない(高速化のコツ)
リンク
/LugendrePublic/Haskell書いてるときになんとなく気をつけていること
Haskell-jp wiki - Hikers Guide to Haskell
#ベストプラクティス