GHC.Ptr
| Copyright | (c) The FFI Task Force 2000-2002 |
|---|---|
| License | see libraries/base/LICENSE |
| Maintainer | ffi@haskell.org |
| Stability | internal |
| Portability | non-portable (GHC Extensions) |
| Safe Haskell | Unsafe |
| Language | Haskell2010 |
Содержание
Значение типа Ptr a представляет указатель на объект или массив объектов, которые могут быть преобразованы в значения Haskell типа a или из них.
Тип a часто будет экземпляром класса Storable, который предоставляет операции преобразования. Однако это не обязательно, и вы можете предоставить свои собственные операции для доступа к указателю. Например, вы можете написать небольшие внешние функции для получения или установки полей структуры C struct.
Экземпляры
| Generic1 (URec (Ptr ()) :: k -> Type) | Since: base-4.9.0.0 |
| Eq (Ptr a) | Since: base-2.1 |
| Data a => Data (Ptr a) | Since: base-4.8.0.0 |
Определено в Data.Data Методы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 :: forall r r'. (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 | |
| Ord (Ptr a) | Since: base-2.1 |
| Show (Ptr a) | Since: base-2.1 |
| Foldable (UAddr :: Type -> Type) | Since: base-4.9.0.0 |
Defined in Data.Foldable Методыfold :: Monoid m => UAddr m -> m Source foldMap :: Monoid m => (a -> m) -> UAddr a -> m Source foldMap' :: Monoid m => (a -> m) -> UAddr a -> m Source foldr :: (a -> b -> b) -> b -> UAddr a -> b Source foldr' :: (a -> b -> b) -> b -> UAddr a -> b Source foldl :: (b -> a -> b) -> b -> UAddr a -> b Source foldl' :: (b -> a -> b) -> b -> UAddr a -> b Source foldr1 :: (a -> a -> a) -> UAddr a -> a Source foldl1 :: (a -> a -> a) -> UAddr a -> a Source toList :: UAddr a -> [a] Source null :: UAddr a -> Bool Source length :: UAddr a -> Int Source elem :: Eq a => a -> UAddr a -> Bool Source maximum :: Ord a => UAddr a -> a Source minimum :: Ord a => UAddr a -> a Source | |
| Traversable (UAddr :: Type -> Type) | Since: base-4.9.0.0 |
| Storable (Ptr a) | Since: base-2.1 |
Определено в Foreign.Storable | |
| Functor (URec (Ptr ()) :: Type -> Type) | Since: base-4.9.0.0 |
| Eq (URec (Ptr ()) p) | Since: base-4.9.0.0 |
| Ord (URec (Ptr ()) p) | Since: base-4.9.0.0 |
Определено в GHC.Generics Методыcompare :: URec (Ptr ()) p -> URec (Ptr ()) p -> Ordering Исходный код (<) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код (<=) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код (>) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код (>=) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код max :: URec (Ptr ()) p -> URec (Ptr ()) p -> URec (Ptr ()) p Исходный код min :: URec (Ptr ()) p -> URec (Ptr ()) p -> URec (Ptr ()) p Исходный код | |
| Generic (URec (Ptr ()) p) | С момента: base-4.9.0.0 |
| data URec (Ptr ()) (p :: k) |
Используется для маркировки случаев С момента: base-4.9.0.0 |
| type Rep1 (URec (Ptr ()) :: k -> Type) | |
Определено в GHC.Generics | |
| type Rep (URec (Ptr ()) p) | |
Определено в GHC.Generics | |
data FunPtr a Исходный код
Значение типа FunPtr a — это указатель на функцию, вызываемую из внешнего кода. Тип a обычно является внешним типом, типом функции с нулем или более аргументами, где
- типы аргументов являются маршализуемыми внешними типами, т. е.
Char,Int,Double,Float,Bool,Int8,Int16,Int32,Int64,Word8,Word16,Word32,Word64,Ptr a,FunPtr a,StablePtr aили переименованием любого из них с помощьюnewtype. - тип возвращаемого значения — это либо маршализуемый внешний тип, либо имеет вид
IO t, гдеt— это маршализуемый внешний тип или().
Значение типа FunPtr a может быть указателем на внешнюю функцию, возвращённой другой внешней функцией или импортированной со статическим адресом, как
foreign import ccall "stdlib.h &free" p_free :: FunPtr (Ptr a -> IO ())
или указатель на функцию Haskell, созданную с помощью обёртки-заглушки, объявленной для создания FunPtr правильного типа. Например:
type Compare = Int -> Int -> Bool foreign import ccall "wrapper" mkCompare :: Compare -> IO (FunPtr Compare)
Вызовы обёртки-заглушки, такие как mkCompare, выделяют память, которую необходимо освободить с помощью freeHaskellFunPtr, когда она больше не требуется.
Для преобразования значений FunPtr в соответствующие функции Haskell можно определить динамическую заглушку для конкретного внешнего типа, например:
type IntFunction = CInt -> IO () foreign import ccall "dynamic" mkFun :: FunPtr IntFunction -> IntFunction
Примеры реализации
| Eq (FunPtr a) | |
| Ord (FunPtr a) | |
Определено в GHC.Ptr | |
| Show (FunPtr a) | С версии: base-2.1 |
| Storable (FunPtr a) | С версии: base-2.1 |
Определено в Foreign.Storable Методы | |
Константа nullPtr содержит выделенное значение Ptr, которое не ассоциировано с допустимым местом памяти.
castPtr :: Ptr a -> Ptr b Источник
Функция castPtr преобразует указатель из одного типа в другой.
plusPtr :: Ptr a -> Int -> Ptr b Источник
Смещает заданный адрес на заданное смещение в байтах.
alignPtr :: Ptr a -> Int -> Ptr a Source
Дано произвольный адрес и ограничение выравнивания, alignPtr возвращает следующий более высокий адрес, удовлетворяющий ограничению выравнивания. Ограничение выравнивания x выполняется любым адресом, делящимся на x. Данная операция идемпотентна.
minusPtr :: Ptr a -> Ptr b -> Int Source
Вычисляет смещение, необходимое для перехода от второго к первому аргументу. У нас
p2 == p1 `plusPtr` (p2 `minusPtr` p1)
nullFunPtr :: FunPtr a Source
Константа nullFunPtr содержит выделенное значение FunPtr, которое не связано с допустимым местоположением памяти.
castFunPtr :: FunPtr a -> FunPtr b Source
Преобразует FunPtr в FunPtr другого типа.
Небезопасные функции
castFunPtrToPtr :: FunPtr a -> Ptr b Source
Примечание: это допустимо только на архитектурах, где указатели на данные и функции охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, чьи интерфейсы уже полагаются на это предположение.
castPtrToFunPtr :: Ptr a -> FunPtr b Source
Примечание: это допустимо только на архитектурах, где указатели на данные и функции охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, чьи интерфейсы уже полагаются на это предположение.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-Ptr.html