views:

321

answers:

3

I've installed Haskell via the pre built installer v6.8.2.

When trying to compile this sample file with GHC

module Main where
import Text.ParserCombinators.Parsec
import System.Environment

main :: IO ()
main = do args <- getArgs
          putStrLn ("Hello")

I get the following error:

D:\src\Haskell>ghc -o read read.hs
ghc -o read read.hs
read.o(.text+0x1b5):fake: undefined reference to   `__stginit_parseczm2zi1zi0zi0_TextziParserCombinatorsziParsec_'
collect2: ld returned 1 exit status

I have installed Parsec via cabal.

Does anyone have any idea's as to what is wrong?

+1  A: 

According to the Parsec docs (section 1.2.1 Compiling with GHC), you should do this:

When your linking the files together, you need to tell GHC where it can find libraries (-L) and to link with the Parsec library too (-l):
ghc -o myprogram myfile1.o myfile2.o -Lc:\parsec -lparsec

This documentation on the Haskell compiler may help.

Jeff Yates
Not quite what I was looking for but thank you anyway for trying;)
chollida
You're welcome. It was a guess.
Jeff Yates
+8  A: 

Try ghc --make -o read read.hs. GHC will take care of linker dependencies.

PiotrLegnica
This does appear to work, many thanks
chollida
+2  A: 

I'll put out one other way to make this work

ghc -package parsec -o read read.hs

From the ghc documentation

-package P

This option causes the installed package P to be exposed. The package P can be 
specified in full with its version number (e.g. network-1.0) or the version number 
can be omitted if there is only one version of the package installed. If there are 
multiple versions of P installed, then all other versions will become hidden.

The -package P option also causes package P to be linked into the resulting 
executable or shared object. Whether a packages' library is linked statically or 
dynamically is controlled by the flag pair -static/-dynamic.

see http://www.haskell.org/ghc/docs/latest/html/users%5Fguide/packages.html

chollida