为什么以下编译失败(在GHC 7.4.2上)?
{-# LANGUAGE TemplateHaskell #-}
f1 = $([| id |])
main = print $ (f1 (42 :: Int), f1 (42 :: Integer))
请注意,以下编译正常:
{-# LANGUAGE TemplateHaskell #-}
f1 = id -- Don't use template Haskell here.
main = print $ (f1 (42 :: Int), f1 (42 :: Integer))
我可以使用语言扩展来进行前编译吗?
我知道模板Haskell在这个例子中看起来很愚蠢,但它是一个更复杂问题的简化版本,需要模板Haskell来处理任意大小的元组。
答案 0 :(得分:4)
由于某种原因,显然为f1
分配了Integer -> Integer
类型而不是更一般的a -> a
。添加显式类型签名使您的示例编译对我来说很好:
{-# LANGUAGE TemplateHaskell #-}
f1 :: a -> a
f1 = $([| id |])
main = print $ (f1 (42 :: Int), f1 (42 :: Integer))