以下 Haskell Maxims and Arrows の翻訳
私は2001年から仕事でもプライベートでもHaskellを書いてきました。仕事で書いていたのはそのうち3年のことです。これらは私が学んだことです…
- Haskellは理解すれば理解するほどきれいに書けることを約束してくれます。信頼してください
- 常にパターンを探しましょう。単純になるとき、またその時だけそれらを抽象化するのです
- 辛抱強く抽象化を正しく理解しましょう。もしそれが出来たならすべてのことが魔法のようにつじつまが合うようになるでしょう。
- 実装そのものが設計図となります
- 呼び出す人が気にするべきでないものはすべて隠しましょう。特に型変数は適切な量化を持って取り除くことができるでしょう。
fst3
,snd3
,thd3
が base に入っていないのには理由があります。三つ組やそれ以上のものが必要になった時はそれらのフィールドを持ったデータ型を作りましょう。- 型クラスのルールに間違いなく従うとわからないうちはそのインスタンスを作るべきではありません。
- より単純な型クラスのインスタンスはより複雑な一般化よりも価値があります。
Monoid
は大仰な型クラスではなく確実に時間と労力をかけるだけの価値のあるものですApplicative
は全く正当な評価を得ていませんでしたが"静的な情報"を持つ型にはとても役に立つものです。traverse
とsequenceA
は底知れない魔法を使えるようにしてくれます。Monad
: この型クラスのインスタンスになる可能性のあるもはいつも簡単に見つかります。- 型クラスは型変数が少なければ少ないほど良いものです。何かを関連する型に変えることは出来ないでしょうか?その型クラスを2つの型クラスに分割することはできないでしょうか?いくつかの型変数を親の型クラスに分けることは出来ないでしょうか?
- 最適化する時まで正格評価について気にすることはありません。
- 最適化への直感はうまくいかないことが多いです。プロファイリングする前は型クラスの複雑さについて疑うだけにとどめておいたほうが良いでしょう。
- Orphan instances はとても小さなこぶです。
- 型それ自体は重くありません(つまり消されてしまいます)。例えば(
TypeInType
を使って)カインドから型に落ちた*
は何の情報も持ちません。 IORef
はたぶん使う必要がないでしょう。- Template Haskell は理解するのがとても大変ですが、時にはそれに値する価値があります。