GHC doesn't compile Happy example
carlos.scheidegger@via-rs.net
carlos.scheidegger@via-rs.net
Mon, 1 Oct 2001 17:06:20 -0300
Hello all.
I'm trying to use GHC to compile the example parser in Happy,
but with no success. I'm using GHC 5.02 for W2K, and I'm not
quite sure what to do to make it work. I successfully compiled
some small test cases, to see if I had installation problems, and
they compiled just fine.
First, the Happy example uses some functions that exist in
Hugs but not in GHC, like isAlpha, isDigit and isSpace (I think so,
at least, because i type ':t isAlpha' in GHCi and get 'variable not in
scope'), so I created a module called CharClasses with these
functions. So, I ran happy and generated calc.hs without any
problems.
When I try to compile calc.hs, by doing
ghc -o calc.exe calc.hs CharClasses.hs
I get:
c:/ghc/ghc-
5.02/libHSstd.a(PrelMain__1.o)(.text+0x16)://c/tmp/ghc1756.hc:
undefined reference to `__stginit_Main'
c:/ghc/ghc-
5.02/libHSstd.a(PrelMain__2.o)(.text+0x4)://c/tmp/ghc1756.hc:
undefined reference to `Main_main_closure'
c:/ghc/ghc-
5.02/libHSstd.a(PrelMain__2.o)(.text+0x33)://c/tmp/ghc1756.hc:
undefined reference to `Main_main_closure'
I tried to compile each .o file separately, but I got the exact
same errors. I don't know much about the structure of ghc and the
interactions with gcc, but this does look like a linker error, and I'm
guessing it's trying to tell me that I don't have a main function. But I
do have one, as I checked the calc.hs and the
main = getContents >> print . calc . lexer
is there. GHCi seems to load the module just fine, and the
parser and lexer seem to be working correctly. One strange thing
that happens is that if I run an example from the interactive mode,
it works, but if I call the main function, I get
*** Exception: calc.hs:285: Non-exhaustive patterns in function
lexer
Another strange behavior is that I can only call the main function
once. Any other call I get:
Happy> main
*** Exception: illegal operation
Action: hGetContents
Handle: {loc=<stdin>,type=semi-closed,binary=False,buffering=line}
Reason: handle is closed
File: <stdin>
If I reload all modules with ':s' I can run it again, but also only
once.
I really don't know what I'm doing wrong. Can anyone help me?
Thank you in advance,
Carlos