Hello!

I've played with jhc and sdl binding a bit on osx.
Unfortunately it does not worked. The original example compiled, but exited with exception. (it said the there is no autoreleasepool defined...)
After a little modification I've got correct haskell code, what fails with gcc.

I've attached the source file.
Cheers,
Csaba

Here is the output:
jhc -p SDL test.hs -o test --optc=-I/opt/local/include/SDL --optc=-D_GNU_SOURCE=1 --optc=-D_THREAD_SAFE --optc=-L/opt/local/lib --optc=-lSDLmain --optc=-lSDL --optc=-Wl,-framework,Cocoa
jhc 0.7.6 (0.7.6-3)
Finding Dependencies...
Using Ho Cache: '/Users/hruskacsaba/.jhc/cache'
Main                    [test.hs] <~/.jhc/cache/sapvdjvngcil41e08abohho0f9.ho>
Fresh: <~/.jhc/cache/sapvdjvngcil41e08abohho0f9.ho>
Typechecking...
Compiling...
Collected Compilation...
-- typeAnalyzeMethods
-- BoxifyProgram
-- Boxy WorkWrap
-- LambdaLift
E
├─case: 696
├─case-alt: 1160
├─error: 10
├─lambda: 193
├─let-binding: 206
├─lit: 2336
├─other: 417
├─prim: 240
└─var-use: 1478
Converting to Grin...
Found 0 CAFs to convert to constants, 0 of which are recursive.
Recursive

Constant

CAFS
theMain$7 v-1341403669 (FtheMain$7)
theMain$6 v-1345597973 (FtheMain$6)
-- eval ni70382562 WHNF-[CJhc.Addr.Ptr]
-- eval ni240266248 WHNF-[CGraphics.UI.SDL.Events.SDLVideoResize,CGraphics.UI.SDL.Events.SDLSysWMEvent,CGraphics.UI.SDL.Events.SDLQuit,CGraphics.UI.SDL.Events.SDLJoyButtonUp,CGraphics.UI.SDL.Events.SDLJoyButtonDown,CGraphics.UI.SDL.Events.SDLJoyHatMotion,CGraphics.UI.SDL.Events.SDLJoyBallMotion,CGraphics.UI.SDL.Events.SDLJoyAxisMotion,CGraphics.UI.SDL.Events.SDLMouseButtonUp,CGraphics.UI.SDL.Events.SDLMouseButtonDown,CGraphics.UI.SDL.Events.SDLMouseMotion,CGraphics.UI.SDL.Events.SDLKeyUp,CGraphics.UI.SDL.Events.SDLKeyDown,CGraphics.UI.SDL.Events.SDLActiveEvent,CGraphics.UI.SDL.Events.SDLNoEvent,CGraphics.UI.SDL.Events.SDLUserEvent]
-- eval ni230871714 WHNF-[CGraphics.UI.SDL.Keysym.Keysym]
-- eval ni66805364 WHNF-[CGraphics.UI.SDL.Keysym.Keysym]
-- eval ni735449157 WHNF-[P3_W@.fInstance@.iForeign.Storable.peek.Graphics.UI.SDL.Events.Event$2,P3_W@.fInstance@.iForeign.Storable.peek.Graphics.UI.SDL.Events.Event$3]
-- eval ni166760994 WHNF-[CInt#]
-- eval ni23258552 WHNF-[CJhc.Prim.[],CJhc.Prim.:]
-- eval ni49754508 WHNF-[CJhc.Maybe.Nothing,CJhc.Maybe.Just]
-- eval ni78697292 WHNF-[CWord32#]
-- eval ni174292042 WHNF-[CJhc.Maybe.Nothing,CJhc.Maybe.Just]
-- eval ni813569055 WHNF-[P2_Graphics.UI.SDL.Video.fillRect$2]
-- eval ni1055524921 WHNF-[P2_Foreign.C.String.withCString$2,P2_Foreign.Marshal.Utils.with$2,P2_Graphics.UI.SDL.Events.228_wait]
-- eval ni2300728 WHNF-[CJhc.Addr.Ptr]
-- eval ni70310210 WHNF-[CJhc.Basics.(,)]
-- eval ni1503142939 WHNF-[?]
-- eval ni21331994 WHNF-[CJhc.Prim.[],CJhc.Prim.:]
-- eval ni15337342 WHNF-[CGraphics.UI.SDL.Events.Focus#,CGraphics.UI.SDL.Keysym.Modifier#]
-- eval ni110932008 WHNF-[CGraphics.UI.SDL.Events.Focus#,CGraphics.UI.SDL.Keysym.Modifier#]
-- eval ni106881404 WHNF-[CWord32#,CWord8#]
-- eval ni106881404 WHNF-[CWord32#,CWord8#]
-- eval ni1809191493 WHNF-[CWord32#,CWord8#]
-- eval ni1809191493 WHNF-[CWord32#,CWord8#]
-- eval ni10795820 WHNF-[CWord8#]
-- eval ni174120830 WHNF-[CGraphics.UI.SDL.Events.Focus#,CGraphics.UI.SDL.Keysym.Modifier#]
-- eval ni3774298 WHNF-[CGraphics.UI.SDL.Events.Focus#,CGraphics.UI.SDL.Keysym.Modifier#]
-- eval ni217071266 WHNF-[P2_Main.display$7,P2_Graphics.UI.SDL.Video.fillRect$4]
-- eval ni100884800 WHNF-[P2_theMain$5,P2_theMain$3,P2_theMain$4,P2_theMain$2]
-- eval ni185293000 WHNF-[CJhc.Addr.Ptr]
-- apply nd100122 WHNF-[P2_Graphics.UI.SDL.Video.fillRect$2]
(fMain.display$6,1) -> S
(fMain.display$4,0) -> S
(fGraphics.UI.SDL.General.failWithError$2,0) -> S
(fGraphics.UI.SDL.Video.fillRect,1) -> S
(fGraphics.UI.SDL.Video.fillRect,2) -> S
(fGraphics.UI.SDL.Video.fillRect$4,0) -> S
(fForeign.C.String.withCString,1) -> S
(fForeign.Marshal.Utils.with,1) -> S
(fForeign.Marshal.Alloc.alloca,0) -> S
(fForeign.Marshal.Alloc.alloca,1) -> S
(fW@.fForeign.Marshal.Alloc.allocaBytes,1) -> S
(fInstance@.iJhc.Show.show.default,0) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$9,0) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$9,1) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$6,0) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$5,0) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$4,1) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$4,2) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$2,0) -> S
(fInstance@.iGraphics.UI.SDL.Utilities.toEnum.Graphics.UI.SDL.Events.MouseButton,0) -> S
(fGraphics.UI.SDL.Utilities.fromEnum,0) -> S
(fGraphics.UI.SDL.Utilities.fromEnum,1) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$7,0) -> S
(fGraphics.UI.SDL.Utilities.fromBitmask$7,1) -> S
(fForeign.Marshal.Utils.with$2,0) -> S
(fW@.fInstance@.iForeign.Storable.pokeElemOff.default,0) -> S
(fW@.fInstance@.iForeign.Storable.pokeByteOff.default,0) -> S
(fForeign.Storable.poke,0) -> S
(fForeign.Storable.poke,1) -> S
(fForeign.C.String.withCString$2,0) -> S
(fW@.fGraphics.UI.SDL.Events.peekMouse,0) -> S
(bapply_36712,0) -> S
(bapply_36713,0) -> S
r34 -> S
r39 -> S
r40 -> S
r41 -> S
r42 -> S
r85 -> S
r86 -> S
r87 -> S
r88 -> S
r89 -> S
r123 -> S
r124 -> S
r125 -> S
r126 -> S
r131 -> S
r133 -> S
r136 -> S
r137 -> S
r138 -> S
r139 -> S
r140 -> S
Writing "test_code.c"
Running: gcc '-std=gnu99' -D_GNU_SOURCE '-falign-functions=4' -ffast-math -Wextra -Wall -Wno-unused-parameter -o test test_code.c -DNDEBUG -O3 -I/opt/local/include/SDL '-D_GNU_SOURCE=1' -D_THREAD_SAFE -L/opt/local/lib -lSDLmain -lSDL '-Wl,-framework,Cocoa'
test_code.c: In function ‘fForeign_C_String_withCString’:
test_code.c:4297: warning: initialization from incompatible pointer type
test_code.c: In function ‘fForeign_Marshal_Utils_with’:
test_code.c:4404: warning: initialization from incompatible pointer type
test_code.c:4409: warning: initialization from incompatible pointer type
test_code.c: In function ‘fGraphics_UI_SDL_Events_waitEventBlocking$d2’:
test_code.c:4571: warning: implicit declaration of function ‘SDL_WaitEvent’
test_code.c: In function ‘fGraphics_UI_SDL_General_failWithError’:
test_code.c:4598: warning: implicit declaration of function ‘SDL_GetError’
test_code.c:4599: error: ‘v74’ undeclared (first use in this function)
test_code.c:4599: error: (Each undeclared identifier is reported only once
test_code.c:4599: error: for each function it appears in.)
test_code.c: In function ‘fGraphics_UI_SDL_Video_fillRect’:
test_code.c:5341: warning: initialization from incompatible pointer type
test_code.c:5345: warning: initialization from incompatible pointer type
test_code.c: In function ‘fGraphics_UI_SDL_Video_fillRect$d2’:
test_code.c:5360: warning: implicit declaration of function ‘SDL_FillRect’
test_code.c: In function ‘fGraphics_UI_SDL_Video_fillRect$d3’:
test_code.c:5370: warning: comparison between signed and unsigned
test_code.c: In function ‘fMain_display’:
test_code.c:5757: warning: implicit declaration of function ‘SDL_GetVideoSurface’
test_code.c:5764: warning: initialization from incompatible pointer type
test_code.c:5767: warning: assignment from incompatible pointer type
test_code.c:5781: warning: implicit declaration of function ‘SDL_MapRGB’
test_code.c:5784: warning: initialization from incompatible pointer type
test_code.c:5787: warning: initialization from incompatible pointer type
test_code.c:5813: warning: initialization from incompatible pointer type
test_code.c:5824: warning: implicit declaration of function ‘SDL_Flip’
test_code.c: In function ‘fMain_display$d7’:
test_code.c:5879: warning: implicit declaration of function ‘SDL_UpperBlit’
test_code.c: In function ‘fMain_display$d8’:
test_code.c:5889: warning: comparison between signed and unsigned
test_code.c: In function ‘fW$__fInstance$__iForeign_Storable_pokeByteOff_default’:
test_code.c:7802: warning: initialization from incompatible pointer type
test_code.c: In function ‘fW$__fInstance$__iForeign_Storable_pokeElemOff_default’:
test_code.c:7818: warning: initialization from incompatible pointer type
test_code.c:7829: warning: initialization from incompatible pointer type
test_code.c:7840: warning: initialization from incompatible pointer type
test_code.c:7851: warning: initialization from incompatible pointer type
test_code.c: In function ‘ftheMain’:
test_code.c:8147: warning: implicit declaration of function ‘SDL_SetVideoMode’
test_code.c:8154: warning: initialization from incompatible pointer type
test_code.c:8157: warning: assignment from incompatible pointer type
test_code.c:8167: warning: statement with no effect
test_code.c:8170: warning: implicit declaration of function ‘SDL_EnableUNICODE’
test_code.c:8185: warning: implicit declaration of function ‘SDL_LoadBMP_RW’
test_code.c:8192: warning: initialization from incompatible pointer type
test_code.c:8195: warning: assignment from incompatible pointer type
test_code.c:8235: warning: statement with no effect
test_code.c:8240: warning: statement with no effect
test_code.c:8249: warning: statement with no effect
test_code.c:8254: warning: statement with no effect
test_code.c: In function ‘ftheMain$d2’:
test_code.c:8269: warning: implicit declaration of function ‘SDL_WM_SetCaption’
test_code.c: In function ‘ftheMain$d3’:
test_code.c:8282: warning: initialization from incompatible pointer type
test_code.c: In function ‘ftheMain$d4’:
test_code.c:8293: warning: implicit declaration of function ‘SDL_RWFromFile’
test_code.c: In function ‘ftheMain$d5’:
test_code.c:8317: warning: initialization from incompatible pointer type
jhc: user error (C code did not compile.)