I thought it might not be a bad idea to throw up some of the final code. Now one caveat is that I'm going to assume that if you're playing along at home that you have downloaded any materials needed for the tutorial and have it in the same directory as the executable that you're running.
I'll skip tutorial 1 because it's a little too trivial, but below is the code for the second tutorial.
> import Prelude
> import Graphics.UI.SDL as SDL
> background = "background.bmp"
> hello = "hello_world.bmp"
> main = do
The first thing we have to do is initialize the SDL subsystems. For simplicity,
I always just do init [InitEverything].
> SDL.init [InitEverything]
Next, we create a small, vanilla, window using setVideoMode
> setVideoMode 640 480 32 
Since the images are just bitmaps, we can just use the straight up loadBMP functions.
loadBMP returns a surface, which is the fundamental unit for drawing in SDL.
> image <- loadBMP hello
> back <- loadBMP background
Next we need to grab the surface that we want to draw to.
> screen <- getVideoSurface
And the two blitSurface commands to actually paint the contents of one surface
onto another. The arguments are the source surface, the clipping rectangle of
this surface, the target surface, and the rectangle to which you want to paint.
In both cases, Nothing represents the entire surface. That's why when painting
the background both rectangles are Nothing.
> blitSurface back Nothing screen Nothing
> blitSurface image Nothing screen (Just (Rect 180 140 0 0))
Finally, we need to actually draw the surface on the screen using flip.
> SDL.flip screen
The following function uses events to make sure that the window will stay open
until you choose to close it.
> quitHandler :: IO ()
> quitHandler = do
> e <- waitEvent
> case e of
> Quit -> return ()
> otherwise -> quitHandler