mam trywialne Szablon programu Haskell, który drukuje nazwę bieżącego modułu (główne, tutaj):Dlaczego TemplateHaskell powoduje, że GHC ładuje pakiety?
{-# 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
Kiedy skompilować ten, mam wczytywanie następujące komunikaty z 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 ...
Dlaczego ghc ładuje wszystkie te pakiety, gdy włączony jest szablon Haskell? Ilekroć buduję program, który używa szablonu Haskell, szczególnie takiego, który jest zbudowany na wiele pakietów, moje ostrzeżenia dotyczące kompilacji są przytłoczone tymi zbędnymi komunikatami "Ładowanie". Byłoby miło, gdybym mógł zatrzymać drukowanie wiadomości lub zatrzymać (niepotrzebne?) Ładowanie modułów w ogóle.
'Language.Haskell.TH' jest w pakiecie' szablon haskell', która z kolei zależy od wszystkich innych te. Duh. –
Szablon Haskell wykonuje ocenę w czasie kompilacji, więc moduły i pakiety potrzebne do uruchomienia kodu, który jest łączony w czasie kompilacji, muszą zostać załadowane. – kosmikus