15

新しい拡張機能と古い拡張機能の両方で提供される言語機能を必要とする新しい Haskell プロジェクトを開始する場合、どちらを使用すればよいですか? 新しいものですか、それとも古いものですか?例えば:

新しいものはよりクリーンで、統合された方法でより多くの機能を言語に追加しているため、私はより新しいものに傾倒しています。ただし、古いものはより多くのコンパイラでサポートされており、既存のライブラリで使用されており、おそらくプログラマーの間でもよく知られています。

更新:回答/コメントで述べたように、上記の「置き換え」関係は完全に正確ではありません。ただし、タスクが複数の拡張機能によって同等に達成できる (よく発生する) ケースに興味があります。

4

2 に答える 2

13

ここでは「置き換え」は非常にあいまいです。

他の機能と重複するセマンティクスを持つ言語機能の場合、いくつかのケースを認識できます。

  • 一部の機能は既存の機能を一般化します
  • いくつかは代替アプローチを提供します

より一般的な機能の場合、リスクとメリットがあります。一般性は、言語の他の多くの部分に影響を与えたり、制限されたりする可能性があります。後者の場合、一般的なケースを選択します。

FDやATなどの厳密な順序がない代替アプローチの選択である場合、一般的なアドバイスを提供することは困難です。

したがって、要約すると、「いいえ」、言語機能に関しては、「古い」ものよりも「新しい」ものを使用する明確な理由はありません。彼らはそのように分類しません。

于 2012-11-16T20:56:34.517 に答える
5

要するに、はい、そしてあなたが述べる理由のために:よりクリーンでより明確です。

時折、関数従属性を持つマルチパラメータ型クラスとしてより適切に表現されるクラスがある場所に出くわします。これは、その方法でより簡単にパラメトリシティを取得できるためですが、通常、関連付けられた型族は、より明確で柔軟な表現方法です。 。型族は、関数従属性よりも関数型プログラマーにとってはるかに直感的です。

GADTは、存在記号よりもはるかにクリーンで明確な構文を持ち、概念上のハードルが少なく、必要な動作を簡単に取得できます。

可能であれば新しいものを使用し、必要に応じて古い方法を使用することをお勧めします。これらの素敵な新しい拡張機能は、より高いプロファイルで実行できます。

于 2012-11-16T22:47:47.993 に答える