
Take a look at unsafePerformIO, it is of type IO a -> a. Its not
particularly "safe" (the name gives a clue), but it does what you
want.
On 9/20/05, Mark Carter
I'm puzzling out how to get a Bool from am IO Bool. I know I'm not supposed to, but I don't see any way around my predicament.
The basic setup is: I have an edit box, and a panel. If you click the LMB on the panel when the edit box is checked, this means you want to move a graphical object around the panel. If it is unchecked, then clicking the LMB means you want to add a graphical object.
The relevant bits I've managed to put together so far are:
mainFrame = do -- main application frame streams <- varCreate [] ... cbEdit <- checkBox p1 [text := "Edit Mode", on command ::= onCbEdit textlog] -- p1 is the panel, ignore textlog let isEditing = get cbEdit checked -- returns type IO Bool windowOnMouse p False {- no motion events -} (onMouse p streams isEditing) ... where onMouse w streams isEditChecked mouse = case mouse of MouseLeftDown pt mods -> if isEditChecked then findStream w streams pt else addStream w streams pt other -> skipCurrentEvent -- unprocessed event: send up the window chain
where -- define findStream and addStream
The problem is that isEditChecked is of type IO Bool, not Bool. I presume that I should actually be taking a different (non-imperative) approach, and I'm wondering if anyone could suggest what that approach should be? Many apologies for being a clueless n00b.
___________________________________________________________ Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail http://uk.messenger.yahoo.com _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe