Skip to content

Instantly share code, notes, and snippets.

@lotz84
Created February 2, 2017 15:05
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lotz84/b94f03c4a83cb54dfefb26d2256cae0f to your computer and use it in GitHub Desktop.
Save lotz84/b94f03c4a83cb54dfefb26d2256cae0f to your computer and use it in GitHub Desktop.
Haskell Maxims and Arrows という Reddit の投稿が面白かったので訳しました

以下 Haskell Maxims and Arrows の翻訳


私は2001年から仕事でもプライベートでもHaskellを書いてきました。仕事で書いていたのはそのうち3年のことです。これらは私が学んだことです…

  1. Haskellは理解すれば理解するほどきれいに書けることを約束してくれます。信頼してください
  2. 常にパターンを探しましょう。単純になるとき、またその時だけそれらを抽象化するのです
  3. 辛抱強く抽象化を正しく理解しましょう。もしそれが出来たならすべてのことが魔法のようにつじつまが合うようになるでしょう。
  4. 実装そのものが設計図となります
  5. 呼び出す人が気にするべきでないものはすべて隠しましょう。特に型変数は適切な量化を持って取り除くことができるでしょう。
  6. fst3, snd3, thd3 が base に入っていないのには理由があります。三つ組やそれ以上のものが必要になった時はそれらのフィールドを持ったデータ型を作りましょう。
  7. 型クラスのルールに間違いなく従うとわからないうちはそのインスタンスを作るべきではありません。
  8. より単純な型クラスのインスタンスはより複雑な一般化よりも価値があります。
  9. Monoidは大仰な型クラスではなく確実に時間と労力をかけるだけの価値のあるものです
  10. Applicativeは全く正当な評価を得ていませんでしたが"静的な情報"を持つ型にはとても役に立つものです。traversesequenceAは底知れない魔法を使えるようにしてくれます。
  11. Monad: この型クラスのインスタンスになる可能性のあるもはいつも簡単に見つかります。
  12. 型クラスは型変数が少なければ少ないほど良いものです。何かを関連する型に変えることは出来ないでしょうか?その型クラスを2つの型クラスに分割することはできないでしょうか?いくつかの型変数を親の型クラスに分けることは出来ないでしょうか?
  13. 最適化する時まで正格評価について気にすることはありません。
  14. 最適化への直感はうまくいかないことが多いです。プロファイリングする前は型クラスの複雑さについて疑うだけにとどめておいたほうが良いでしょう。
  15. Orphan instances はとても小さなこぶです。
  16. 型それ自体は重くありません(つまり消されてしまいます)。例えば(TypeInTypeを使って)カインドから型に落ちた*は何の情報も持ちません。
  17. IORefはたぶん使う必要がないでしょう。
  18. Template Haskell は理解するのがとても大変ですが、時にはそれに値する価値があります。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment