我正在遇到看起来像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生成的代码,我不想手动修改任何内容。
答案 0 :(得分:1)
正如@dfeuer暗示的那样,这是不可能的。在最坏的情况下,GHC必须在整个项目中寻找给定函数的用法,以推断出论证的轻浮。
此报告为bug in Happy,此后一直是fixed。