問題タブ [overlapping-instances]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
422 参照

haskell - 自分の型クラスのすべての型に対して (Show のような) 型クラスのインスタンスを宣言する方法は?

私は型クラスを持っています:

あまり役に立たないように見えますが、意味的に異なる種類のsを (type同義語だけでなく) 強く区別するために使用しています。Map String Int

クラスの任意のタイプで動作する関数がまだあります。

  1. この区別を行うためのより良い方法はありますか (おそらくWrapperインスタンスのボイラープレートなしで)?

私はこれをしたい:

多くのボイラープレートShowインスタンスも記述する代わりに。

と を介しFlexibleInstancesUndecidableInstances、GHC は私のインスタンス宣言がすべてに適用されると考える点に私を導きShowますGHC.Show。HaskellWiki と StackOverflow の回答者と HaskellWikiOverlappingInstancesは、完全に安全ではなく、混乱を招く可能性があると確信しています。GHCはそれを示唆していません。

  1. なぜ GHC は最初に fx のどのインスタンスShow Intを選択すればよいかわからないことに文句を言い (それで、なぜコンパイル時に与えた制約を調べないのですか?)、次に、インスタンスがオーバーラップする可能性があると言われ、突然何をすべきかを知ってしまうのでしょうか?

  2. OverlappingInstancesで許可を避けることはできますnewtypeか?

0 投票する
1 に答える
87 参照

haskell - Haskell/GHC: 重複するインスタンスが報告されましたが、コンテキストでは単一のインスタンスしか許可されていません

親愛なる Haskell/GHC 専門家の皆様

提供されたコンテキストに従って実際に有効なのは1つだけなのに、GHCが重複するインスタンスを報告する理由がよくわかりません。たとえば、次のコードを考えてみましょう。

それをコンパイルすると、次のようになります。

ポイントは、のインスタンスではない('a', True)型を持つことです。したがって、値には適用されません。(Char, Bool)Cinstance C a => C [a][('a', True)]

では、なぜGHCはそれを考慮するのでしょうか?

問題は、問題を回避する方法 (例: を使用) ではなく、GHC の動作を理解することOverlappingInstancesです。関数呼び出しを「解決」するときにコンテキストが使用されていないためですか?もしそうなら、なぜですか?

前もって感謝します!

0 投票する
1 に答える
261 参照

haskell - Haskell での型変数依存のデフォルト メソッドの実装

クラスの型変数が特定の他のクラスを派生させる場合にのみ、デフォルトのメソッド実装を定義しようとしています。

を使用して型依存インスタンスを作成しようとしましたが=>(正しく使用していますか?)、「重複インスタンス宣言エラー」が発生します: ( https://repl.it/@solly_ucko/Distributions )

次に、実際のインスタンスを追加しようとすると (コンパイラがその時点に到達できるように、以前に作成した「インスタンス」の一部をコメントアウトします)、競合するインスタンスに関するエラーが表示されます。

明確にするために、私の目標は for probabilityand valuesbe defined for all Distributions、および for all for all値を導出するprobabilityOfRangeように定義することです。また、追加の制約が満たされたときにデフォルトを提供したいと考えています。これがなければ、(他の方法に基づく) 合理的なデフォルトは不可能だからです。DistributionsOrd