flip
や\x -> foo bar x 42
のようなハッキングが発生しているコードが多すぎたため、パラメーターの順序を変更するために最近2回コードをリファクタリングしました。
関数シグネチャを設計するとき、カリー化を最大限に活用するのに役立つ原則は何ですか?
カリー化と部分適用を簡単にサポートする言語については、もともとクリス・オカサキからの説得力のある一連の議論があります。
どうして?次に、 データに対する操作を作成する うまくできます。例えば。 insert 1 $ insert 2 $ insert 3 $ s
。これは 状態の関数 にも役立ちます。
「コンテナ」などの標準ライブラリ この規則に従ってください 。
データ構造を最初に配置するために代替引数が指定されることがあるため、データ構造を閉じて、静的構造(ルックアップなど)でもう少し簡潔な関数を生成できます。ただし、特に括弧で囲まれたコードに向かっているため、これはあまり効果がないというのが大まかなコンセンサスのようです。
再帰関数の場合、最も変化の少ない引数(アキュムレータなど)を最後の引数として配置し、最も変化の少ない引数(関数の引数など)を最初に配置するのが一般的です。これは、データ構造の最後のスタイルとうまく構成されます。
Okasakiビューの要約は、 彼のEdisonライブラリ (ここでも別のデータ構造ライブラリ)に示されています。
再利用する可能性が最も高い引数を最初に配置します。関数の引数はこの良い例です。同じリストに多くの異なる関数をマップするよりも、2つの異なるリストにmap f
する可能性がはるかに高くなります。
私はあなたがしたことをする傾向があり、良いと思われる注文を選び、別の注文の方が良いことが判明した場合はリファクタリングします。順序は、関数をどのように使用するかによって大きく異なります(当然)。