\begin{code}
-{-# OPTIONS_GHC -fno-implicit-prelude #-}
+{-# OPTIONS_GHC -XNoImplicitPrelude #-}
+{-# OPTIONS_HADDOCK hide #-}
-----------------------------------------------------------------------------
-- |
-- Module : GHC.Ptr
--
-----------------------------------------------------------------------------
+-- #hide
module GHC.Ptr where
import GHC.Base
+import GHC.Show
+import GHC.Num
+import GHC.List ( length, replicate )
+import Numeric ( showHex )
+
+#include "MachDeps.h"
------------------------------------------------------------------------
-- Data pointers.
0# -> addr;
n -> Ptr (plusAddr# a (i -# n)) }
--- |Computes the offset required to get from the first to the second
+-- |Computes the offset required to get from the second to the first
-- argument. We have
--
-- > p2 == p1 `plusPtr` (p2 `minusPtr` p1)
-- this assumption.
castPtrToFunPtr :: Ptr a -> FunPtr b
castPtrToFunPtr (Ptr addr) = FunPtr addr
+
+
+------------------------------------------------------------------------
+-- Show instances for Ptr and FunPtr
+
+instance Show (Ptr a) where
+ showsPrec _ (Ptr a) rs = pad_out (showHex (wordToInteger(int2Word#(addr2Int# a))) "")
+ where
+ -- want 0s prefixed to pad it out to a fixed length.
+ pad_out ls =
+ '0':'x':(replicate (2*SIZEOF_HSPTR - length ls) '0') ++ ls ++ rs
+
+instance Show (FunPtr a) where
+ showsPrec p = showsPrec p . castFunPtrToPtr
\end{code}