GHC не может вывести без поднятия
Я сталкиваюсь с тем, что выглядит как недействительный код, сгенерированный Happy. Проблема сводится к тому, что GHC не выводит сигнатуру типа с многоугольником для функции. Вот пример этого:
{-# Language MagicHash #-}
f x = ()
main = pure (f 1#)
Поскольку GHC выводит f :: a -> ()
где a :: *
это не с
• Couldn't match a lifted type with an unlifted type
When matching the kind of ‘GHC.Prim.Int#’
• In the first argument of ‘f’, namely ‘1#’
In the first argument of ‘pure’, namely ‘(f 1#)’
In the expression: pure (f 1#)
Есть ли языковые прагмы, которые я мог бы просто включить, чтобы этот код компилировался? Я знаю, что теоретически я мог бы просто добавить сигнатуры типов, но, поскольку это код, сгенерированный Happy, который я бы предпочел не менять вручную.
1 ответ
Решение
Как намекнул @dfeuer, это невозможно. В худшем случае, GHC должен будет искать использование данной функции во всем проекте, чтобы определить легкость аргумента.
Это было сообщено как ошибка в Happy и с тех пор было исправлено.