GHC无法推断未提升类型

时间:2017-08-02 23:05:52

标签: haskell types happy polykinds

我正在遇到看起来像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 个答案:

答案 0 :(得分:1)

正如@dfeuer暗示的那样,这是不可能的。在最坏的情况下,GHC必须在整个项目中寻找给定函数的用法,以推断出论证的轻浮。

此报告为bug in Happy,此后一直是fixed