Re: [Haskell-cafe] Re: Beginner: IORef constructor?

2006-12-06 Thread Benjamin Franksen
On Wednesday 06 December 2006 07:40, Bernie Pope wrote:
 On 05/12/2006, at 1:00 PM, Benjamin Franksen wrote:
  Bernie Pope wrote:
  If you want a global variable then you can use something like:
 
  import System.IO.Unsafe (unsafePerformIO)
 
  global = unsafePerformIO (newIORef [])
 
  But this is often regarded as bad programming style (depends who
  you talk to).
 
  Besides, isn't this example /really/ unsafe? I thought, at least
  the IORef
  has to be monomorphic or else type safety is lost?

 Perhaps your question is rhetorical, 

Half-way ;-) I was pretty sure but not 100%. Thanks for the nice 
example.

Cheers,
Ben
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Beginner: IORef constructor?

2006-12-05 Thread Bernie Pope


On 05/12/2006, at 1:00 PM, Benjamin Franksen wrote:


Bernie Pope wrote:

If you want a global variable then you can use something like:

import System.IO.Unsafe (unsafePerformIO)

global = unsafePerformIO (newIORef [])

But this is often regarded as bad programming style (depends who you
talk to).


Besides, isn't this example /really/ unsafe? I thought, at least  
the IORef

has to be monomorphic or else type safety is lost?


Perhaps your question is rhetorical, but in case it is not, then yes,
we ought to make it a monomorphic type.

This little example seg-faults on my mac, and no doubt on other  
machines as

well:

   import System.IO.Unsafe (unsafePerformIO)
   import Data.IORef

   global = unsafePerformIO (newIORef [])

   main = do
  modifyIORef global (id :)
  x - readIORef global
  print ((head x + 1) :: Int)

It writes the identity function onto the front of the global  
variable, and then reads

it back as an int, and tries to do addition on it.

Cheers,
Bernie.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Beginner: IORef constructor?

2006-12-04 Thread Benjamin Franksen
Bernie Pope wrote:
 If you want a global variable then you can use something like:
 
 import System.IO.Unsafe (unsafePerformIO)
 
 global = unsafePerformIO (newIORef [])
 
 But this is often regarded as bad programming style (depends who you
 talk to). 

Besides, isn't this example /really/ unsafe? I thought, at least the IORef
has to be monomorphic or else type safety is lost?

Cheers
Ben

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe