使用不同参数调用时模板Haskell编译错误

时间:2012-08-27 14:45:01

标签: haskell template-haskell

为什么以下编译失败(在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来处理任意大小的元组。

1 个答案:

答案 0 :(得分:4)

由于某种原因,显然为f1分配了Integer -> Integer类型而不是更一般的a -> a。添加显式类型签名使您的示例编译对我来说很好:

{-# LANGUAGE TemplateHaskell #-}

f1 :: a -> a
f1 = $([| id |])

main = print $ (f1 (42 :: Int), f1 (42 :: Integer))