
PS: if the indents are wrong, that's because of gmail copy and past, Im so
sorry.
2009/4/17 Tsunkiet Man
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
Take a look at the syntax for 'let' inside a 'do'.
On Fri, Apr 17, 2009 at 12:57 AM, Tsunkiet Man
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
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
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
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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe