Am Freitag 17 April 2009 01:37:25 schrieb 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 ()
In the "Just file" case, you want to have two IO-actions. If you don't use (>>=) or (>>) to chain them together, you must put them in a do-block, so case file of Nothing -> return () Just file -> do set stat [text := "HELLO"] return () But I think you can omit the return () in that branch anyway, set foo bar should have the correct type already. > > 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! > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe