| Copyright | (c) The FFI task force 2001 | 
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) | 
| Maintainer | ffi@haskell.org | 
| Stability | provisional | 
| Portability | portable | 
| Safe Haskell | Trustworthy | 
| Language | Haskell2010 | 
Foreign.Ptr
Contents
Description
This module provides typed pointers to foreign data. It is part of the Foreign Function Interface (FFI) and will normally be imported via the Foreign module.
Synopsis
- data Ptr a
 - nullPtr :: Ptr a
 - castPtr :: Ptr a -> Ptr b
 - plusPtr :: Ptr a -> Int -> Ptr b
 - alignPtr :: Ptr a -> Int -> Ptr a
 - minusPtr :: Ptr a -> Ptr b -> Int
 - data FunPtr a
 - nullFunPtr :: FunPtr a
 - castFunPtr :: FunPtr a -> FunPtr b
 - castFunPtrToPtr :: FunPtr a -> Ptr b
 - castPtrToFunPtr :: Ptr a -> FunPtr b
 - freeHaskellFunPtr :: FunPtr a -> IO ()
 - data IntPtr
 - ptrToIntPtr :: Ptr a -> IntPtr
 - intPtrToPtr :: IntPtr -> Ptr a
 - data WordPtr
 - ptrToWordPtr :: Ptr a -> WordPtr
 - wordPtrToPtr :: WordPtr -> Ptr a
 
Data pointers
A value of type  represents a pointer to an object, or an
 array of objects, which may be marshalled to or from Haskell values
 of type Ptr  aa.
The type a will often be an instance of class
 Storable  which provides the marshalling operations.
 However this is not essential, and you can provide your own operations
 to access the pointer. For example you might write small foreign
 functions to get or set the fields of a C struct.
Instances
Methods
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Ptr a -> c (Ptr a) Source
gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Ptr a) Source
toConstr :: Ptr a -> Constr Source
dataTypeOf :: Ptr a -> DataType Source
dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (Ptr a)) Source
dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Ptr a)) Source
gmapT :: (forall b. Data b => b -> b) -> Ptr a -> Ptr a Source
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Ptr a -> r Source
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Ptr a -> r Source
gmapQ :: (forall d. Data d => d -> u) -> Ptr a -> [u] Source
gmapQi :: Int -> (forall d. Data d => d -> u) -> Ptr a -> u Source
gmapM :: Monad m => (forall d. Data d => d -> m d) -> Ptr a -> m (Ptr a) Source
gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Ptr a -> m (Ptr a) Source
gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Ptr a -> m (Ptr a) Source
alignPtr :: Ptr a -> Int -> Ptr a Source
Given an arbitrary address and an alignment constraint,
 alignPtr  yields the next higher address that fulfills the
 alignment constraint. An alignment constraint x is fulfilled by
 any address divisible by x. This operation is idempotent.
minusPtr :: Ptr a -> Ptr b -> Int Source
Computes the offset required to get from the second to the first argument. We have
p2 == p1 `plusPtr` (p2 `minusPtr` p1)
Function pointers
A value of type  is a pointer to a function callable
 from foreign code. The type FunPtr  aa will normally be a foreign type,
 a function type with zero or more arguments where
- the argument types are marshallable foreign types,
 i.e. 
Char,Int,Double,Float,Bool,Int8,Int16,Int32,Int64,Word8,Word16,Word32,Word64,,Ptra,FunPtraor a renaming of any of these usingStablePtranewtype. - the return type is either a marshallable foreign type or has the form
 
whereIOttis a marshallable foreign type or(). 
A value of type  may be a pointer to a foreign function,
 either returned by another foreign function or imported with a
 a static address import likeFunPtr  a
foreign import ccall "stdlib.h &free" p_free :: FunPtr (Ptr a -> IO ())
or a pointer to a Haskell function created using a wrapper stub
 declared to produce a FunPtr  of the correct type. For example:
type Compare = Int -> Int -> Bool foreign import ccall "wrapper" mkCompare :: Compare -> IO (FunPtr Compare)
Calls to wrapper stubs like mkCompare allocate storage, which
 should be released with freeHaskellFunPtr  when no
 longer required.
To convert FunPtr  values to corresponding Haskell functions, one
 can define a dynamic stub for the specific foreign type, e.g.
type IntFunction = CInt -> IO () foreign import ccall "dynamic" mkFun :: FunPtr IntFunction -> IntFunction
Instances
Methods
sizeOf :: FunPtr a -> Int Source
alignment :: FunPtr a -> Int Source
peekElemOff :: Ptr (FunPtr a) -> Int -> IO (FunPtr a) Source
pokeElemOff :: Ptr (FunPtr a) -> Int -> FunPtr a -> IO () Source
peekByteOff :: Ptr b -> Int -> IO (FunPtr a) Source
pokeByteOff :: Ptr b -> Int -> FunPtr a -> IO () Source
nullFunPtr :: FunPtr a Source
The constant nullFunPtr  contains a
 distinguished value of FunPtr  that is not
 associated with a valid memory location.
castFunPtrToPtr :: FunPtr a -> Ptr b Source
castPtrToFunPtr :: Ptr a -> FunPtr b Source
freeHaskellFunPtr :: FunPtr a -> IO () Source
Release the storage associated with the given FunPtr , which
 must have been obtained from a wrapper stub. This should be called
 whenever the return value from a foreign import wrapper function is
 no longer required; otherwise, the storage it uses will leak.
Integral types with lossless conversion to and from pointers
A signed integral type that can be losslessly converted to and from
 Ptr. This type is also compatible with the C99 type intptr_t, and
 can be marshalled to and from that type safely.
Instances
Methods
succ :: IntPtr -> IntPtr Source
pred :: IntPtr -> IntPtr Source
toEnum :: Int -> IntPtr Source
fromEnum :: IntPtr -> Int Source
enumFrom :: IntPtr -> [IntPtr] Source
enumFromThen :: IntPtr -> IntPtr -> [IntPtr] Source
enumFromTo :: IntPtr -> IntPtr -> [IntPtr] Source
enumFromThenTo :: IntPtr -> IntPtr -> IntPtr -> [IntPtr] Source
Methods
toRational :: IntPtr -> Rational Source
Methods
finiteBitSize :: IntPtr -> Int Source
countLeadingZeros :: IntPtr -> Int Source
countTrailingZeros :: IntPtr -> Int Source
Methods
(.&.) :: IntPtr -> IntPtr -> IntPtr Source
(.|.) :: IntPtr -> IntPtr -> IntPtr Source
xor :: IntPtr -> IntPtr -> IntPtr Source
complement :: IntPtr -> IntPtr Source
shift :: IntPtr -> Int -> IntPtr Source
rotate :: IntPtr -> Int -> IntPtr Source
setBit :: IntPtr -> Int -> IntPtr Source
clearBit :: IntPtr -> Int -> IntPtr Source
complementBit :: IntPtr -> Int -> IntPtr Source
testBit :: IntPtr -> Int -> Bool Source
bitSizeMaybe :: IntPtr -> Maybe Int Source
bitSize :: IntPtr -> Int Source
isSigned :: IntPtr -> Bool Source
shiftL :: IntPtr -> Int -> IntPtr Source
unsafeShiftL :: IntPtr -> Int -> IntPtr Source
shiftR :: IntPtr -> Int -> IntPtr Source
unsafeShiftR :: IntPtr -> Int -> IntPtr Source
rotateL :: IntPtr -> Int -> IntPtr Source
Methods
sizeOf :: IntPtr -> Int Source
alignment :: IntPtr -> Int Source
peekElemOff :: Ptr IntPtr -> Int -> IO IntPtr Source
pokeElemOff :: Ptr IntPtr -> Int -> IntPtr -> IO () Source
peekByteOff :: Ptr b -> Int -> IO IntPtr Source
pokeByteOff :: Ptr b -> Int -> IntPtr -> IO () Source
ptrToIntPtr :: Ptr a -> IntPtr Source
casts a Ptr to an IntPtr
intPtrToPtr :: IntPtr -> Ptr a Source
casts an IntPtr to a Ptr
An unsigned integral type that can be losslessly converted to and from
 Ptr. This type is also compatible with the C99 type uintptr_t, and
 can be marshalled to and from that type safely.
Instances
Methods
succ :: WordPtr -> WordPtr Source
pred :: WordPtr -> WordPtr Source
toEnum :: Int -> WordPtr Source
fromEnum :: WordPtr -> Int Source
enumFrom :: WordPtr -> [WordPtr] Source
enumFromThen :: WordPtr -> WordPtr -> [WordPtr] Source
enumFromTo :: WordPtr -> WordPtr -> [WordPtr] Source
enumFromThenTo :: WordPtr -> WordPtr -> WordPtr -> [WordPtr] Source
Methods
quot :: WordPtr -> WordPtr -> WordPtr Source
rem :: WordPtr -> WordPtr -> WordPtr Source
div :: WordPtr -> WordPtr -> WordPtr Source
mod :: WordPtr -> WordPtr -> WordPtr Source
quotRem :: WordPtr -> WordPtr -> (WordPtr, WordPtr) Source
Methods
toRational :: WordPtr -> Rational Source
Methods
finiteBitSize :: WordPtr -> Int Source
countLeadingZeros :: WordPtr -> Int Source
countTrailingZeros :: WordPtr -> Int Source
Methods
(.&.) :: WordPtr -> WordPtr -> WordPtr Source
(.|.) :: WordPtr -> WordPtr -> WordPtr Source
xor :: WordPtr -> WordPtr -> WordPtr Source
complement :: WordPtr -> WordPtr Source
shift :: WordPtr -> Int -> WordPtr Source
rotate :: WordPtr -> Int -> WordPtr Source
setBit :: WordPtr -> Int -> WordPtr Source
clearBit :: WordPtr -> Int -> WordPtr Source
complementBit :: WordPtr -> Int -> WordPtr Source
testBit :: WordPtr -> Int -> Bool Source
bitSizeMaybe :: WordPtr -> Maybe Int Source
bitSize :: WordPtr -> Int Source
isSigned :: WordPtr -> Bool Source
shiftL :: WordPtr -> Int -> WordPtr Source
unsafeShiftL :: WordPtr -> Int -> WordPtr Source
shiftR :: WordPtr -> Int -> WordPtr Source
unsafeShiftR :: WordPtr -> Int -> WordPtr Source
rotateL :: WordPtr -> Int -> WordPtr Source
Methods
sizeOf :: WordPtr -> Int Source
alignment :: WordPtr -> Int Source
peekElemOff :: Ptr WordPtr -> Int -> IO WordPtr Source
pokeElemOff :: Ptr WordPtr -> Int -> WordPtr -> IO () Source
peekByteOff :: Ptr b -> Int -> IO WordPtr Source
pokeByteOff :: Ptr b -> Int -> WordPtr -> IO () Source
ptrToWordPtr :: Ptr a -> WordPtr Source
casts a Ptr to a WordPtr
wordPtrToPtr :: WordPtr -> Ptr a Source
casts a WordPtr to a Ptr