Welches Wörterbuch wählt GHC aus, wenn mehr als ein Wörterbuch im Geltungsbereich ist?
Betrachten Sie das folgende Beispiel:
import Data.Constraint
class Bar a where
bar :: a -> a
foo :: (Bar a) => Dict (Bar a) -> a -> a
foo Dict = bar
GHC bietet zwei Auswahlmöglichkeiten für das Wörterbuch, wenn ein @ ausgewählt wirBar
Instanz infoo
: es könnte das Wörterbuch aus dem @ verwendBar a
Einschränkung auffoo
, oder es könnte die Laufzeit verwendenDict
, um ein Wörterbuch zu erhalten. Sehendiese Frag für ein Beispiel, in dem die Wörterbücher @ entsprechander Instanzen.
Welches Wörterbuch verwendet GHC und warum ist es die "richtige" Wahl?