Какой словарь выбирает GHC, когда в области видимости находится несколько?

Рассмотрим следующий пример:

import Data.Constraint

class Bar a where
  bar :: a -> a

foo :: (Bar a) => Dict (Bar a) -> a -> a
foo Dict = bar

GHC имеет два варианта использования словаря при выбореBar экземпляр вfoo: он может использовать словарь изBar a ограничение наfooили он может использовать среду выполненияDict чтобы получить словарь. Увидетьэтот вопрос для примера, где словари соответствуютразные экземпляров.

Какой словарь использует GHC, и почему это «правильный» выбор?

Ответы на вопрос(3)

Ваш ответ на вопрос