3
我正在運行,看起來像由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