More pointer-equality weirdness

Conal Elliott conal at microsoft.com
Mon Apr 22 17:46:57 EDT 2002


I'm getting some _really_ weird results under ghci from the unsafePtrEq
I'm using (thanks to Sigbjorn).  It works fine under ghc.  I'm running
5.03.20020208 under Windows XP.  Is there a work-around, perhaps via a
different implementation of unsafePtrEq?  - Conal

module Main where

import PrelGHC

unsafePtrEq :: a -> a -> Bool
unsafePtrEq a b = (unsafeCoerce# a) `eqAddr#` (unsafeCoerce# b)

main = do print $ 1 `unsafePtrEq` 1
          print $ 1 `unsafePtrEq` 1 || True

{- Results:

  bash-2.05a$ ghci TestPtrEq
     ___         ___ _
    / _ \ /\  /\/ __(_)
   / /_\// /_/ / /  | |      GHC Interactive, version 5.03, for Haskell
98.
  / /_\\/ __  / /___| |      http://www.haskell.org/ghc/
  \____/\/ /_/\____/|_|      Type :? for help.

  Loading package std ... linking ... done.
  Loading package lang ... linking ... done.
  Loading package concurrent ... linking ... done.
  Loading package util ... linking ... done.
  Loading package text ... linking ... done.
  Loading package data ... linking ... done.
  Compiling TestPtrEq        ( TestPtrEq.hs, interpreted )
  Ok, modules loaded: TestPtrEq.
  Main> main

  False
  TestPtrEq> 

It works, however, under ghc:

  bash-2.05a$ ghc -fglasgow-exts -o test.exe TestPtrEq.hs
  bash-2.05a$ ./test.exe
  True
  True

-}




More information about the Glasgow-haskell-bugs mailing list