[Haskell-cafe] wxHaskell not in scope

Daniel Fischer daniel.is.fischer at web.de
Thu Apr 16 18:58:57 EDT 2009

Am Freitag 17 April 2009 00:43:18 schrieb Tsunkiet Man:
> Thank you for your response, however if I can't do that, why can the
> example of wxHaskell do that?
> I refer to the following code inside
> http://darcs.haskell.org/wxhaskell/samples/wx/ (ImageViewer.hs)
> Line 99 untill 110
>     openImage sw vbitmap mclose status fname
>       = do -- load the new bitmap
>            bm <- bitmapCreateFromFile fname  -- can fail with exception
>            closeImage vbitmap
>            set vbitmap [value := Just bm]
>            set mclose [enabled := True]
>            set status [text := fname]
>            -- reset the scrollbars
>            bmsize <- get bm size
>            set sw [virtualSize := bmsize]
>            repaint sw
>        `catch` \err -> repaint sw
> if I'm correct the openImage is also defined in the where clause. Therefor
> by what I think it should not be possible, but it is.
> Thanks for everything.

In your code, the variable dt was bound in the do-block, and you tried to reference it in 
the definition of onOpen in the where clause, where it is not in scope.
The definition of openImage in ImageViewer.hs does not reference any variables bound in 
the do-block of imageViewer, only its parameters and the bitmap bm bound in its own body.
As an alternative to defining onOpen in your main do-block, you could also pass the debug-
text dt as a parameter.

More information about the Haskell-Cafe mailing list