[Haskell-cafe] wxHaskell not in scope

Tsunkiet Man temp.tsun at gmail.com
Thu Apr 16 19:37:25 EDT 2009


Hello,

what you suggested worked! Im very happy with it. However another error
suddenly came up. It sais the last statement in a 'do' must be an
expression, he is refering to line 41:45

I change my code to this:

                    on (menu exit) := close f,
                    on (menu open) := onOpen f dt vFile ]

            return ()

            where
                onOpen :: Frame a -> staticText c -> Var b -> IO ()
                onOpen frame stat var = do   file <- fileOpenDialog frame
False True "Open File" [("PGM bestanden (*.pgm)",["*.pgm"]),("Alle bestanden
(*.*)",["*.*"])] "" ""
                                        case file of
                                            Nothing ->      return ()
                                            Just file ->    set stat [text
:= "HELLO"]
                                                            return ()

As far as I can tell, if the file is nothing it will return something of IO
() and if the file is something it will return something of IO (). So that
error is kind of strange in my opinion. Do you know what caused it?

Thanks for your help!

2009/4/17 Lennart Augustsson <lennart at augustsson.net>

> Take a look at the syntax for 'let' inside a 'do'.
>
> On Fri, Apr 17, 2009 at 12:57 AM, Tsunkiet Man <temp.tsun at gmail.com>
> wrote:
> > PS: a small note, sorry for multiple mails.
> >
> > After doing the let ... in function it did not work. =( It gave the error
> > that 'do' has to end with some result. I did:
> >
> > do let <the function> in <all the code that was behind the do>
> >
> > and it still didn't work =(. I'm doing something wrong I think.
> >
> > Thanks for your help.
> >
> > 2009/4/17 Tsunkiet Man <temp.tsun at gmail.com>
> >>
> >> 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.
> >>
> >>
> >>
> >>
> >> 2009/4/17 Lennart Augustsson <lennart at augustsson.net>
> >>>
> >>> Variables bound in the do block are not in scope in the where.
> >>> Use a let inside the do for onOpen instead.
> >>>
> >>> On Thu, Apr 16, 2009 at 11:53 PM, Tsunkiet Man <temp.tsun at gmail.com>
> >>> wrote:
> >>> > Hello,
> >>> >
> >>> > I'm trying to create a GUI by using wxHaskell. However I get the
> weird
> >>> > error
> >>> > message of "Not in scope "dt"", well so I sorted them so that my so
> >>> > called
> >>> > "dt" was in scope, however it failed. Can someone please tell me how
> I
> >>> > can
> >>> > solve this error?
> >>> >
> >>> >            ... A lot of code that is not relevant in my opinion, if
> I'm
> >>> > wrong please correct me and I will post my full code
> >>> >
> >>> >             --Debug text --
> >>> >             dt <- staticText f [text := "Hello world!"]
> >>> >
> >>> >             imagePanel <- panel f [position := Point 2 2, clientSize
> :=
> >>> > Size
> >>> > 100 100, tooltip := "This is a drawPanel", bgcolor := rgb 255 255
> 255]
> >>> >             set f [ clientSize := Size 700 500,
> >>> >                     menuBar := [mFile, mHelp],
> >>> >                     visible := True,
> >>> >                     on (menu exit) := close f,
> >>> >                     on (menu open) := onOpen f vFile ]
> >>> >
> >>> >
> >>> >             return ()
> >>> >
> >>> >             where
> >>> >                 onOpen :: Frame a -> Var b -> IO ()
> >>> >                 onOpen frame var = do   file <- fileOpenDialog frame
> >>> > False
> >>> > True "Open File" [("PGM bestanden (*.pgm)",["*.pgm"]),("Alle
> bestanden
> >>> > (*.*)",["*.*"])] "" ""
> >>> >                                         case file of
> >>> >                                             Nothing ->      return ()
> >>> >                                             Just file ->    set dt
> >>> > [text :=
> >>> > "HELLO"]
> >>> >                                                             return ()
> >>> >
> >>> > Thank you for your help, I really owe haskell-cafe.
> >>> >
> >>> > Greetings Tsunkiet Man
> >>> > _______________________________________________
> >>> > Haskell-Cafe mailing list
> >>> > Haskell-Cafe at haskell.org
> >>> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >>> >
> >>> >
> >>
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090417/793e9972/attachment.htm


More information about the Haskell-Cafe mailing list