Template Haskell and linking
Simon Peyton-Jones
simonpj at microsoft.com
Mon Sep 20 11:12:06 EDT 2010
It probably is linked if you use --make, but should not be if you use an explicit link command
ghc -o run-me A.o B.o C.o
Just omit LargeThModule.o
Hmm. Maybe this won't work, because there is a module initialisation tree, in which each module calls the initialisation function of the modules it imports. So probably the module that imports LargeThModule will call LargeThModule's initialisation function, so omitting LargeThModule.o would give a link error.
I suppose you could hack around this by commenting out the body of LargeThModule and recompiling it to make a small .o file for runtime linking, but it would be a gross hack.
Oh, here's a thought. If you use -split-objs, the linker should drop all non-executed code, so that will probably do what you want.
Simon
From: glasgow-haskell-users-bounces at haskell.org [mailto:glasgow-haskell-users-bounces at haskell.org] On Behalf Of Jonas Almström Duregård
Sent: 17 September 2010 21:48
To: glasgow-haskell-users at haskell.org
Subject: Template Haskell and linking
Hi GHC users!
Does anyone know if an import that is only used by Template Haskell (i.e. not in "actual" code) is reflected in the produced executable?
Example:
import LargeModule(thFunction)
$thfunction
...
Is LargeModule linked in the executable file? (Assume thFunction is not referenced by the code it generates or elsewhere in the example)
Best regards
Jonas
More information about the Glasgow-haskell-users
mailing list