我有打印當前模塊的名稱一個簡單的模板哈斯克爾程序(主程序,這裏):爲什麼TemplateHaskell會導致GHC加載包?
{-# LANGUAGE TemplateHaskell #-}
module Main
(main
) where
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
modName ∷ String
modName = $(fmap loc_module qLocation »= λmod → return (LitE (StringL mod)))
main ∷ IO()
main = putStrLn modName
當我編譯此,我從GHC以下加載郵件:
[email protected] ~/test/modname $ ghc --make Main
[1 of 1] Compiling Main (Main.hs, Main.o)
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package array-0.4.0.0 ... linking ... done.
Loading package deepseq-1.3.0.0 ... linking ... done.
Loading package containers-0.4.2.1 ... linking ... done.
Loading package pretty-1.1.1.0 ... linking ... done.
Loading package template-haskell ... linking ... done.
Linking Main ...
當模板Haskell啓用時,爲什麼ghc加載所有這些包?每當我構建一個使用Haskell模板的程序,特別是針對大量程序包構建的程序時,我的編譯警告會被這些多餘的「加載」消息所淹沒。如果我可以停止打印消息,或停止(不必要的)模塊加載發生,那將會很好。
'Language.Haskell.TH'在包'template-haskell'中,而該包又取決於所有其他那些。咄。 – 2012-07-10 21:52:21
模板Haskell執行編譯時評估,因此必須加載運行在編譯時拼接的代碼所需的模塊和包。 – kosmikus 2012-07-10 21:52:57