[Haskell-cafe] wxHaskell not in scope

Tsunkiet Man temp.tsun at gmail.com
Thu Apr 16 19:38:05 EDT 2009


PS: if the indents are wrong, that's because of gmail copy and past, Im so
sorry.

2009/4/17 Tsunkiet Man <temp.tsun at gmail.com>

> 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/6fd74ba9/attachment.htm


More information about the Haskell-Cafe mailing list