Может ли кто-нибудь объяснить или угадать мотивацию, стоящую за лимитом на продвижение типа данных, обсуждаемую в разделе 7.9.2 руководства пользователя GHC?
Для продвижения по службе действуют следующие ограничения:
- Мы рекламируем только типы данных, чьи виды имеют форму
* -> ... -> * -> *
. В частности, мы не продвигаем более высокосортные типы данных, такие какdata Fix f = In (f (Fix f))
, или типы данных, типы которых включают продвинутые типы, такие какVec :: * -> Nat -> *
.
В частности, меня интересует последний бит о продвинутых типах, таких как Vec :: * -> Nat -> *
. Содействие некоторым типам кажется естественным. Я столкнулся с этим довольно быстро, пытаясь преобразовать одну из моих библиотек, чтобы использовать определенные продвинутые виды для различных типов phantom вместо того, чтобы использовать kind *
для всего, для обеспечения лучшей документации и т.д.
Часто причины ограничений для компилятора, подобные этим, выходят на вас с небольшим мышлением, но я не вижу этого. Поэтому мне интересно, входит ли это в категорию "еще не нужно, поэтому мы его не построили" или "это невозможно/неразрешимо/уничтожает вывод".