S. Alexander Jacobson wrote:

Nothing actually happens when newChan is called
except construction of a new datastructure.  It
would be nice to have non IO monad code be able to
create a new Chan that gets passed to IO code that
uses it somewhere else.

Alternatively, is there a way to create a Chan
outside the IO monad?


I'm sure I'll get death threats for posting this but here it goes:


C:\>hugs
__   __ __  __  ____   ___     _________________________________________
||   || ||  || ||  || ||__     Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||    Copyright (c) 1994-2003
||---||         ___||          World Wide Web: http://haskell.org/hugs
||   ||                        Report bugs to: [EMAIL PROTECTED]
||   || Version: Nov 2003       _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Type :? for help
Prelude> :l IOExts
IOExts> :t unsafePerformIO
unsafePerformIO :: IO a -> a
IOExts>



Personally I think the usage of unsafePerformIO is fine (but don't overuse it!). It's akin to the unsafe keyword in C#. All you're really doing is saying "Look, GHC, I know you don't like this stuff but I _promise_ that this code won't screw anything up for you", and as the programmer you should be allowed to say that every now and then.

/S

--
Clothes make the man. Naked people have little or no influence on society.
- Mark Twain
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to