GHC无法推断未提升的类型
问题描述:
我正在运行,看起来像由Happy生成的无效代码。问题归结为GHC不推断函数的polykinded类型签名。这里有这样一个例子: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生成的代码,我不希望手动修改任何内容。
这似乎相关:https://stackoverflow.com/a/35320729/180286。基本上一个函数不能是多种类型的,除非你真的想要,只有在GHC 8+ –
如果Happy生成的代码不能以这种方式编译,那么它可能是Happy中的一个错误(也许可能是一个错误解决了!)。你能组合一个生成这样的代码的简单快乐例子吗?我不认为GHC会推断出多种类型的“*”以外的其他类型。 – user2407038
@ user2407038虽然我的问题仍然存在,但这个特定的Happy错误很容易修复。基本上,任何生成的使用'happyMonad2Reduce'并且不是使用'-a'生成的代码对于'nt :: Int#'变量都会产生这个问题(不使用'-a',因此类型推断问题)。我现在正在打击一些更糟糕的快乐问题,因此为_this_提出问题正在背后。 :) – Alec