This program:

------------------------------------------------------------------------------
--import Trace
import IOExts
import Monad
import System

newtype State s a = State { runState :: s -> (a,s) }

instance Monad (State s) where
   return v  = State (\ s -> (v,s))
   p  >>= f  = State (\ s -> let (r,s') = runState p s
                             in runState (f r) s')
   fail str  = State (\ s -> error str)


main = do { a <- getArgs ; print(hugsMain a) }

hugsMain ["test"]  = runState (test  ()) ()
hugsMain ["test2"] = runState (test2 ()) ()

test :: (Monad m) => a -> m a
test a =
   do () <- (trace "Hello") (return ())
      return a

test2 :: (Monad m) => a -> m a
test2 a =
   do (trace "Hello") (return ())
      return a

------------------------------------------------------------------------------

Gives this output:

bash% ghc-4.04 -fglasgow-exts -syslib exts Bug2.hs -v
The Glorious Glasgow Haskell Compilation System, version 4.04,
patchlevel 0

Effective command line: -fglasgow-exts -syslib exts -v

Ineffective C pre-processor:
        echo '{-# LINE 1 "Bug2.hs" -}' > c:/tmp/ghc1173.cpp && cat
Bug2.hs >> c:
/tmp/ghc1173.cpp

real    0m0.010s
user    0m0.000s
sys     0m0.010s
ghc-4.04:compile:Interface file Bug2.hi doesn't exist

Haskell compiler:
        c:/usr/local/lib/hsc c:/tmp/ghc1173.cpp  -fglasgow-exts
-fignore-interfa
ce-pragmas -fomit-interface-pragmas -fsimplify [ -finline-phase2
-fmax-simplifie
r-iterations4 ]   -fwarn-overlapping-patterns -fwarn-missing-methods
-fwarn-dupl
icate-exports -fhi-version=404 -static
"-himap=.%.hi:c:/usr/local/lib/imports/ex
ts%.hi:c:/usr/local/lib/imports/exts%.hi:c:/usr/local/lib/imports/exts%.hi:c:/us
r/local/lib/imports/exts%.hi:c:/usr/local/lib/imports/std%.hi"
"-himap-sep=:"
 -v -hifile=c:/tmp/ghc1173.hi -C=c:/tmp/ghc1173.hc
-F=c:/tmp/ghc1173_stb.c -FH=c
:/tmp/ghc1173_stb.h +RTS -H6000000 -K1000000
Glasgow Haskell Compiler, version 4.04, for Haskell 98, compiled by GHC
version
4.03
NOTE: Simplifier still going after 4 iterations; bailing out.

real    0m9.233s
user    0m0.010s
sys     0m0.010s

Pin on Haskell consistency info:
        echo 'static char ghc_hsc_ID[] = "@(#)hsc Bug2.hs      
40.0,,";' >> c:/
tmp/ghc1173.hc

real    0m0.010s
user    0m0.000s
sys     0m0.000s
*** New hi file follows...
__interface Main 404 where
__export Main main;
import IO 1 ! ::;
import PrelAddr 1 ! ::;
import PrelArr 1 ! ::;
import PrelCCall 1 ! ::;
import PrelConc 1 ! ::;
import PrelForeign 1 ! ::;
import PrelIOBase 1 ! ::;
import PrelList 1 ! ::;
import PrelNum 1 ! ::;
import PrelNumExtra 1 ! ::;
instance __forall [s] => {PrelBase.Monad (State s)} = zdfMonadState;
newtype State s a = State {runState :: (s -> (a, s))} ;
zdfMonadState :: __forall [s] => {PrelBase.Monad (State s)} ;
main :: PrelIOBase.IO PrelBase.Z0T ;


ghc-4.04: module version unchanged at 5

Replace .hi file, if changed:
        cmp -s Main.hi c:/tmp/ghc1173.hi-new || ( rm -f Main.hi && cp
c:/tmp/ghc
1173.hi-new Main.hi )

real    0m0.080s
user    0m0.020s
sys     0m0.040s

C compiler:
        gcc -v  -DDONT_WANT_WIN32_DLL_SUPPORT -S -Wimplicit -O
-DSTOLEN_X86_REGS
=4 -fomit-frame-pointer -fno-defer-pop  -I. -Ic:/usr/local/lib/includes
-Ic:/usr
/local/lib/includes ghc1173.c > c:/tmp/ghc1173.ccout 2>&1 && ( if [
ghc1173.s !=
 c:/tmp/ghc1173_o.s ] ; then mv ghc1173.s c:/tmp/ghc1173_o.s ; else exit
0 ; fi
)

real    0m1.582s
user    0m1.291s
sys     0m0.280s
Reading specs from
C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-
cygwin32\egcs-2.91.57\specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)

C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91
.57\cpp.exe -lang-c -v -I. -Ic:/usr/local/lib/includes
-Ic:/usr/local/lib/includ
es -iprefix
C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib/gcc-lib/i586-cygwin3
2\egcs-2.91.57\ -undef -D__GNUC__=2 -D__GNUC_MINOR__=91 -Di386 -D_WIN32
-DWINNT
-D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__))
-D__cdecl=__attr
ibute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -D__i386__
-D_WIN32 -D__
WINNT__ -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__))
-D__cdec
l=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -D__i386
-D__WIN
NT -Asystem(winnt) -Acpu(i386) -Amachine(i386) -D__OPTIMIZE__ -Wimplicit
-remap
-Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di586 -Dpentium
-D__i586
 -D__i586__ -D__pentium -D__pentium__ -D__CYGWIN32__ -D__CYGWIN__
-DDONT_WANT_WI
N32_DLL_SUPPORT -DSTOLEN_X86_REGS=4 ghc1173.c c:/tmp\cc6aO714.i
GNU CPP version egcs-2.91.57 19980901 (egcs-1.1 release) (80386, BSD
syntax)
#include "..." search starts here:
#include <...> search starts here:
 .
 c:\usr\local\lib\includes

C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91
.57\..\..\..\..\..\include

C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91
.57\..\..\..\..\i586-cygwin32\include

C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91
.57\include

\cygnus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..
\..\..\..\include

\cygnus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..
\..\..\i586-cygwin32\include

\cygnus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\inclu
de
End of search list.

C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91
.57\cc1.exe c:/tmp\cc6aO714.i -quiet -dumpbase ghc1173.c -O -Wimplicit
-version
-fomit-frame-pointer -fno-defer-pop -o ghc1173.s
GNU C version egcs-2.91.57 19980901 (egcs-1.1 release) (i586-cygwin32)
compiled
by GNU C version egcs-2.91.57 19980901 (egcs-1.1 release).
c:/tmp/ghc1173.hc:140: warning: `s1lR_closure' was declared `extern' and
later `
static'

Unix assembler:
        gcc -o Bug2.o -c  -I. -Ic:/usr/local/lib/includes
-Ic:/usr/local/lib/inc
ludes c:/tmp/ghc1173.s
0.09user 0.09system 0:00.17elapsed 105%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps
Output file not specified, defaulting to "main.exe"

Linker:
        gcc -v -u _PrelMain_mainIO_closure -u _PrelBase_Izh_static_info
-u _Prel
Base_Czh_static_info -u _PrelBase_Fzh_static_info -u
_PrelBase_Dzh_static_info -
u _PrelAddr_Azh_static_info -u _PrelAddr_Wzh_static_info -u
_PrelAddr_I64zh_stat
ic_info -u _PrelAddr_W64zh_static_info -u
_PrelStable_StablePtr_static_info -u _
PrelBase_Izh_con_info -u _PrelBase_Czh_con_info -u
_PrelBase_Fzh_con_info -u _Pr
elBase_Dzh_con_info -u _PrelAddr_Azh_con_info -u _PrelAddr_Wzh_con_info
-u _Prel
Addr_I64zh_con_info -u _PrelAddr_W64zh_con_info -u
_PrelStable_StablePtr_con_inf
o -u _PrelBase_False_static_closure -u _PrelBase_True_static_closure -u
_PrelPac
k_unpackCString_closure -u _PrelException_stackOverflow_closure -u
_PrelExceptio
n_heapOverflow_closure -u _PrelException_NonTermination_static_closure
-o main.e
xe Bug2.o  -Lc:/usr/local/lib -Lc:/usr/local/lib -Lc:/usr/local/lib
-Lc:/usr/loc
al/lib -Lc:/usr/local/lib  -lHSexts -lHSexts -lHS -lHS_cbits -lHSrts
-lwinmm -lw
sock32 -lgmp
Reading specs from
C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-
cygwin32\egcs-2.91.57\specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)

C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91
.57\collect2.exe -o main.exe -u _PrelMain_mainIO_closure -u
_PrelBase_Izh_static
_info -u _PrelBase_Czh_static_info -u _PrelBase_Fzh_static_info -u
_PrelBase_Dzh
_static_info -u _PrelAddr_Azh_static_info -u _PrelAddr_Wzh_static_info
-u _PrelA
ddr_I64zh_static_info -u _PrelAddr_W64zh_static_info -u
_PrelStable_StablePtr_st
atic_info -u _PrelBase_Izh_con_info -u _PrelBase_Czh_con_info -u
_PrelBase_Fzh_c
on_info -u _PrelBase_Dzh_con_info -u _PrelAddr_Azh_con_info -u
_PrelAddr_Wzh_con
_info -u _PrelAddr_I64zh_con_info -u _PrelAddr_W64zh_con_info -u
_PrelStable_Sta
blePtr_con_info -u _PrelBase_False_static_closure -u
_PrelBase_True_static_closu
re -u _PrelPack_unpackCString_closure -u
_PrelException_stackOverflow_closure -u
 _PrelException_heapOverflow_closure -u
_PrelException_NonTermination_static_clo
sure
C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-
2.91.57\..\..\..\..\i586-cygwin32\lib\crt0.o -Lc:/usr/local/lib
-Lc:/usr/local/l
ib -Lc:/usr/local/lib -Lc:/usr/local/lib -Lc:/usr/local/lib
-LC:\cygnus\cygwin-b
20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57
-LC:\cygnus\cyg
win-b20\H-i586-cygwin32\bin\..\lib\gcc-lib
-L\cygnus\cygwin-b20\H-i586-cygwin32\
lib\gcc-lib\i586-cygwin32\egcs-2.91.57
-LC:\cygnus\cygwin-b20\H-i586-cygwin32\bi
n\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\lib
-L\cyg
nus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\.
.\i586-cygwin32\lib
-LC:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i5
86-cygwin32\egcs-2.91.57\..\..\.. Bug2.o -lHSexts -lHSexts -lHS
-lHS_cbits -lHSr
ts -lwinmm -lwsock32 -lgmp -lgcc -lcygwin -lkernel32 -ladvapi32
-lshell32 -lgcc
0.83user 0.37system 0:01.29elapsed 92%CPU (0avgtext+0avgdata
0maxresident)k
0inputs+0outputs (0major+0minor)pagefaults 0swaps

rm -f c:/tmp/ghc1173*
bash% ./main.exe test
main.exe: fatal error: No threads to run!  Deadlock?
bash% ./main.exe test2
main.exe: fatal error: No threads to run!  Deadlock?
bash% ./main.exe test3

Fail: Bug2.hs:18: Non-exhaustive patterns in function hugsMain

-----------------------------------------------------------------------

However, the simple:

        main = trace "Hello" (print "World") 

works fine.

OS : WinNT; cygwin.

Any ideas what is happening?

Reply via email to