d7febe7b80f79fbcf5c9af9f4c01e52b70603a83
[ghc-hetmet.git] / ghc / lib / std / PrelAddr.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1994-1998
3 %
4
5 \section[PrelAddr]{Module @PrelAddr@}
6
7 \begin{code}
8 {-# OPTIONS -fno-implicit-prelude #-}
9
10 module PrelAddr (
11           Addr(..)
12         , nullAddr                      -- :: Addr
13         , plusAddr                      -- :: Addr -> Int -> Addr
14         , indexAddrOffAddr              -- :: Addr -> Int -> Addr
15
16    ) where
17
18 import PrelGHC
19 import PrelBase
20 import PrelST
21 import PrelCCall
22 \end{code}
23
24 \begin{code}
25 data Addr = A# Addr#    deriving (Eq, Ord)
26
27 instance Show Addr where
28    showsPrec p (A# a) = showsPrec p (I# (addr2Int# a))
29
30 nullAddr = ``NULL'' :: Addr
31
32 plusAddr :: Addr -> Int -> Addr
33 plusAddr (A# addr) (I# off) = A# (int2Addr# (addr2Int# addr +# off))
34
35 instance CCallable Addr
36 instance CCallable Addr#
37 instance CReturnable Addr
38
39 indexAddrOffAddr   :: Addr -> Int -> Addr
40 indexAddrOffAddr (A# addr#) n
41   = case n                              of { I# n# ->
42     case indexAddrOffAddr# addr# n#     of { r# ->
43     (A# r#)}}
44
45 \end{code}
46