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 и с тех пор было исправлено.

Другие вопросы по тегам