Spec-Zone.ru › Haskell 8

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 и FunPtr.

data Ptr a Source

Значение типа Ptr a представляет указатель на объект или массив объектов, которые могут быть преобразованы в значения Haskell типа a или из них.

Тип a часто будет экземпляром класса Storable, который предоставляет операции преобразования. Однако это не обязательно, и вы можете предоставить свои собственные операции для доступа к указателю. Например, вы можете написать небольшие внешние функции для получения или установки полей структуры C struct.

Конструкторы

Ptr Addr#
Экземпляры
Подробности об экземплярах
Generic1 (URec (Ptr ()) :: k -> Type)

Since: base-4.9.0.0

Подробности об экземпляре

Определено в GHC.Generics

Связанные типы

type Rep1 (URec (Ptr ())) :: k -> Type Source

Методы

from1 :: forall (a :: k0). URec (Ptr ()) a -> Rep1 (URec (Ptr ())) a Source

to1 :: forall (a :: k0). Rep1 (URec (Ptr ())) a -> URec (Ptr ()) a Source

Eq (Ptr a)

Since: base-2.1

Подробности об экземпляре

Определено в GHC.Ptr

Методы

(==) :: Ptr a -> Ptr a -> Bool Source

(/=) :: Ptr a -> Ptr a -> Bool Source

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

Instance details

Defined in GHC.Ptr

Методы

compare :: Ptr a -> Ptr a -> Ordering Source

(<) :: Ptr a -> Ptr a -> Bool Source

(<=) :: Ptr a -> Ptr a -> Bool Source

(>) :: Ptr a -> Ptr a -> Bool Source

(>=) :: Ptr a -> Ptr a -> Bool Source

max :: Ptr a -> Ptr a -> Ptr a Source

min :: Ptr a -> Ptr a -> Ptr a Source

Show (Ptr a)

Since: base-2.1

Instance details

Defined in GHC.Ptr

Методы

showsPrec :: Int -> Ptr a -> ShowS Source

show :: Ptr a -> String Source

showList :: [Ptr a] -> ShowS Source

Foldable (UAddr :: Type -> Type)

Since: base-4.9.0.0

Instance details

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

sum :: Num a => UAddr a -> a Source

product :: Num a => UAddr a -> a Source

Traversable (UAddr :: Type -> Type)

Since: base-4.9.0.0

Instance details

Определено в Data.Traversable

Методы

traverse :: Applicative f => (a -> f b) -> UAddr a -> f (UAddr b) Source

sequenceA :: Applicative f => UAddr (f a) -> f (UAddr a) Source

mapM :: Monad m => (a -> m b) -> UAddr a -> m (UAddr b) Source

sequence :: Monad m => UAddr (m a) -> m (UAddr a) Source

Storable (Ptr a)

Since: base-2.1

Instance details

Определено в Foreign.Storable

Методы

sizeOf :: Ptr a -> Int Source

alignment :: Ptr a -> Int Source

peekElemOff :: Ptr (Ptr a) -> Int -> IO (Ptr a) Source

pokeElemOff :: Ptr (Ptr a) -> Int -> Ptr a -> IO () Source

peekByteOff :: Ptr b -> Int -> IO (Ptr a) Source

pokeByteOff :: Ptr b -> Int -> Ptr a -> IO () Source

peek :: Ptr (Ptr a) -> IO (Ptr a) Source

poke :: Ptr (Ptr a) -> Ptr a -> IO () Source

Functor (URec (Ptr ()) :: Type -> Type)

Since: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

fmap :: (a -> b) -> URec (Ptr ()) a -> URec (Ptr ()) b Source

(<$) :: a -> URec (Ptr ()) b -> URec (Ptr ()) a Source

Eq (URec (Ptr ()) p)

Since: base-4.9.0.0

Instance details

Определено в GHC.Generics

Методы

(==) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Source

(/=) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Source

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

Подробности экземпляра

Определено в GHC.Generics

Связанные типы

type Rep (URec (Ptr ()) p) :: Type -> Type Исходный код

Методы

from :: URec (Ptr ()) p -> Rep (URec (Ptr ()) p) x Исходный код

to :: Rep (URec (Ptr ()) p) x -> URec (Ptr ()) p Исходный код

data URec (Ptr ()) (p :: k)

Используется для маркировки случаев Addr#

С момента: base-4.9.0.0

Подробности экземпляра

Определено в GHC.Generics

data URec (Ptr ()) (p :: k) = UAddr {
  • uAddr# :: Addr#
}
type Rep1 (URec (Ptr ()) :: k -> Type)
Подробности экземпляра

Определено в GHC.Generics

type Rep1 (URec (Ptr ()) :: k -> Type) = D1 ('MetaData "URec" "GHC.Generics" "base" 'False) (C1 ('MetaCons "UAddr" 'PrefixI 'True) (S1 ('MetaSel ('Just "uAddr#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UAddr :: k -> Type)))
type Rep (URec (Ptr ()) p)
Подробности экземпляра

Определено в GHC.Generics

type Rep (URec (Ptr ()) p) = D1 ('MetaData "URec" "GHC.Generics" "base" 'False) (C1 ('MetaCons "UAddr" 'PrefixI 'True) (S1 ('MetaSel ('Just "uAddr#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UAddr :: Type -> Type)))

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

Конструкторы

FunPtr Addr#
Примеры реализации
Подробности примеров реализации
Eq (FunPtr a)
Подробности реализации

Определено в GHC.Ptr

Методы

(==) :: FunPtr a -> FunPtr a -> Bool Источник

(/=) :: FunPtr a -> FunPtr a -> Bool Источник

Ord (FunPtr a)
Подробности реализации

Определено в GHC.Ptr

Методы

compare :: FunPtr a -> FunPtr a -> Ordering Источник

(<) :: FunPtr a -> FunPtr a -> Bool Источник

(<=) :: FunPtr a -> FunPtr a -> Bool Источник

(>) :: FunPtr a -> FunPtr a -> Bool Источник

(>=) :: FunPtr a -> FunPtr a -> Bool Источник

max :: FunPtr a -> FunPtr a -> FunPtr a Источник

min :: FunPtr a -> FunPtr a -> FunPtr a Источник

Show (FunPtr a)

С версии: base-2.1

Подробности реализации

Определено в GHC.Ptr

Методы

showsPrec :: Int -> FunPtr a -> ShowS Источник

show :: FunPtr a -> String Источник

showList :: [FunPtr a] -> ShowS Источник

Storable (FunPtr a)

С версии: base-2.1

Подробности реализации

Определено в Foreign.Storable

Методы

nullPtr :: Ptr a Источник

Константа 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

Преобразует FunPtr в Ptr.

Примечание: это допустимо только на архитектурах, где указатели на данные и функции охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, чьи интерфейсы уже полагаются на это предположение.

castPtrToFunPtr :: Ptr a -> FunPtr b Source

Преобразует Ptr в FunPtr.

Примечание: это допустимо только на архитектурах, где указатели на данные и функции охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, чьи интерфейсы уже полагаются на это предположение.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API