В своем разговоре «Занятия, Джим, но не так, как мы их знаем» Саймон Пейтон-Джонс рассказывает о том, как классы классов реализуются в GHC, имея полиморфные функции, берущие дополнительный параметр, который является словарем с правильным функции для типа (ов), заданного функции.Специализация полиморфных функций
Затем он сказал, что GHC часто оптимизирует функции с помощью специальных функций и не передает этот словарь во время выполнения. Затем он сказал, что это не всегда возможно, потому что Haskell имеет полиморфную рекурсию, поэтому, даже если у вас есть целая программа, вы не можете полностью устранить все полиморфизм.
Что он имел в виду? Каков пример программы, в которой неизвестно, какие типы полиморфной функции будут переданы во время компиляции?
Так что это * тип данных *, который является рекурсивным, когда речь идет о * полиморфной рекурсии * в этом случае? – beta
@beta: Нет, полиморфная рекурсия происходит, когда вы рекурсивно вызываете функцию по типам, отличным от того, с чего вы начали. 'f :: Показать a => Int -> a -> String; f 0 x = показать x; f n x = f (n - 1) [x] '- полиморфная рекурсия, происходящая в обычных списках. – Vitus
Упс ... на самом деле добавила полиморфную рекурсивную функцию к примеру. – Fixnum