2

以下が(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))

前者をコンパイルするために使用できる言語拡張機能はありますか?

この例では Template Haskell がばかげているように見えますが、これはより複雑な問題の単純化されたバージョンであり、任意のサイズのタプルを処理するには Template Haskell が必要です。

4

1 に答える 1

4

どうやら何らかの理由で、より一般的なものではなくf1タイプが割り当てられているようです。明示的な型シグネチャを追加すると、例がうまくコンパイルされます。Integer -> Integera -> a

{-# LANGUAGE TemplateHaskell #-}

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

main = print $ (f1 (42 :: Int), f1 (42 :: Integer))
于 2012-08-27T15:06:15.073 に答える