5

我遇到了由 Happy 生成的看似无效的代码。问题归结为 GHC 没有为函数推断出多类型签名。这是一个例子:

{-# Language MagicHash #-}

f x = ()

main = pure (f 1#)

由于 GHC 正在推断f :: a -> ()where 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 生成的代码,我不想手动修改任何内容。

4

1 回答 1

2

正如@dfeuer 所暗示的,这是不可能的。在最坏的情况下,GHC 将不得不在整个项目中寻找给定函数的用法,以推断参数的轻率。

这被报告为Happy 中的一个错误,并已得到修复

于 2017-09-25T20:21:32.513 回答