¿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"?

Respuestas a la pregunta(3)

Su respuesta a la pregunta