¿Qué diccionario elige GHC cuando hay más de un alcance?
Considere el siguiente ejemplo:
import Data.Constraint
class Bar a where
bar :: a -> a
foo :: (Bar a) => Dict (Bar a) -> a -> a
foo Dict = bar
GHC tiene dos opciones para que el diccionario las use al seleccionar unBar
instancia enfoo
: podría usar el diccionario delBar a
restricción enfoo
, o podría usar el tiempo de ejecuciónDict
para conseguir un diccionario Veresta pregunta para un ejemplo donde los diccionarios corresponden adiferente instancias.
¿Qué diccionario usa GHC y por qué es la opción "correcta"?