나는 현재 모듈의 이름을 인쇄하는 사소한 템플릿 하스켈 프로그램 (여기 홈페이지 등)이 있습니다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 ...
을
Template Haskell을 사용할 때 ghc가 모든 패키지를로드하는 이유는 무엇입니까? 템플릿 Haskell을 사용하는 프로그램, 특히 많은 패키지에 대해 빌드 된 프로그램을 빌드 할 때마다 필자의 컴파일 경고는 이러한 불필요한 "로드 중"메시지로 압도됩니다. 메시지가 인쇄되는 것을 멈추게하거나, (불필요한?) 모듈 로딩이 전혀 일어나지 않게하면 좋을 것입니다.
'Language.Haskell.TH'는'template-haskell' 패키지에 있습니다. 사람. 이봐. –
Haskell 템플릿은 컴파일시 평가를 수행하므로 컴파일시에 접합 된 코드를 실행하는 데 필요한 모듈과 패키지를로드해야합니다. – kosmikus