В Haskell для определения экземпляра класса типа вам необходимо предоставить словарь функций, требуемых классом типа. То есть для определения экземпляра Bounded
вам необходимо предоставить определение для minBound
и maxBound
.
Для этого вопроса позвоните в этот словарь vtbl
для экземпляра класса типа. Дайте мне знать, если это плохая аналогия.
Мой вопрос о том, какого рода генерации кода я могу ожидать от GHC, когда я вызываю функцию класса типа. В таких случаях я вижу три возможности:
- Поиск vtbl для поиска функции реализации во время выполнения
- поиск vtbl выполняется во время компиляции, и прямой вызов функции реализации испускается в сгенерированном коде
- просмотр vtbl выполняется во время компиляции, а функция выполнения встроена на сайт вызова
Я хотел бы понять, когда это происходит, или если есть другие возможности.
Кроме того, имеет ли значение, если класс типа был определен в отдельно скомпилированном модуле, а не в качестве части основного блока компиляции?
В запущенной программе кажется, что Haskell знает типы всех функций и выражений в программе. Поэтому, когда я вызываю функцию класса типа, компилятор должен знать, что такое vtbl, и какую именно функцию реализации вызывать. Я ожидаю, что компилятор, по крайней мере, вызовет прямой вызов функции реализации. Это правда?
(я говорю "runnable program" здесь, чтобы отличить его от компиляции модуля, который вы не запускаете.)