彼の講演で Simple Made Easy 、リック・ヒッキーは「アラカルトのポリモーフィズム」について語っています(ビデオの約30:00 )。同じ文脈で、彼はHaskellの 型クラス とClojureの マルチメソッド (およびプロトコル)にも言及しています。
私はこれらの概念にあまり精通していないので、simplicityを達成しようとするときのその有用性を理解したいと思います。 Scalaでのこの概念の例やショーケースに特に興味があります。
多形アラカルトを多形オンデマンドと見なすことができます。
Clojureコミュニティは、Clojureが複数のポリモーフィズム戦略をサポートしているという事実から、ポリモーフィズムアラカルトという用語を誇りに思っています。それらのいくつかは次のとおりです。
継承ポリモーフィズム
これは、Javaで使用されるポリモーフィズム戦略です。 Clojureはプロキシによってこれをサポートします。 Java相互運用を行うときに便利です。
プロトコル
Clojureのプロトコルは、HaskellのTypeClassと同じです。
マルチメソッド
プロトコルは最初の引数のタイプに基づいてポリモーフィックディスパッチを提供しますが、マルチメソッドははるかに柔軟性があり、メソッドの(任意の)引数の任意の関数に基づいてディスパッチできます。
アラカルトのポリモーフィズムは、「ケースに最適なポリモーフィズム戦略を選択してください。すべてツールボックスにあります」という意味です。
TypeClass
パターンをScalaに暗黙的に使用して実装できます。実際の例が必要な場合は、 Scalazソース を読んでください。Scala =言語レベルでのマルチメソッドはサポートしていませんが、次の2.10マクロの助けを借りて可能だと思います。
利点としては、TypeClassやMultimethodなどの高度なポリモーフィズム戦略が Expression Problem の解決に役立ちます。
「目標は、ケースごとにデータ型を定義することです。この場合、既存のコードを再コンパイルせずに、静的な型の安全性を維持しながら(キャストなしなど)、データ型に新しいケースを追加し、データ型に新しい関数を追加できます。」.
ところで、この質問は大きすぎて1つのStackOverflowの質問に収まりません。私の提案は、これらの概念に精通することです。そうすれば、それらの有用性を理解できます。