我有一个简单的模板 Haskell 程序,它打印当前模块的名称(主要,这里):
{-# 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 收到以下加载消息:
tsuraan@localhost ~/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 ...
为什么启用 Template Haskell 时 ghc 会加载所有这些包?每当我构建一个使用 Template Haskell 的程序时,尤其是针对大量包构建的程序时,我的编译警告都会被这些多余的“加载”消息所淹没。如果我可以停止打印消息,或者完全停止(不必要的?)模块加载,那就太好了。