Spec-Zone.ru › Haskell 9

GHC.IO.Handle.Types

Авторское право (c) The University of Glasgow 1994-2009
Лицензия см. libraries/base/LICENSE
Сопровождающий libraries@haskell.org
Стабильность внутренний
Переносимость непереносимый
Безопасный Haskell Safe
Язык Haskell2010

Описание

Базовые типы для реализации дескрипторов ввода-вывода.

API этого модуля нестабилен и не предназначен для использования широкой публикой. Если вам абсолютно необходимо от него зависеть, обязательно задайте строгую верхнюю границу версии, например base < 4.X вместо base < 5, поскольку интерфейс может быстро изменяться без особого предупреждения.

data Handle Источник

В Haskell определены операции чтения и записи символов из файлов и в файлы, представленные значениями типа Handle. Каждое значение этого типа является дескриптором: записью, используемой системой времени выполнения Haskell для управления вводом-выводом объектов файловой системы. Дескриптор обладает как минимум следующими свойствами:

  • управляет ли он вводом, выводом или и тем и другим;
  • является ли он открытым, закрытым или полузакрытым;
  • поддерживает ли объект позиционирование;
  • отключена ли буферизация или включена построчная либо блочная буферизация;
  • буфер (длина которого может быть равна нулю).

Большинство дескрипторов также имеют текущую позицию ввода-вывода, указывающую, где будет выполнена следующая операция ввода или вывода. Дескриптор является читаемым, если он управляет только вводом либо вводом и выводом; аналогично, он является записываемым, если управляет только выводом либо вводом и выводом. Дескриптор открыт сразу после выделения. После закрытия его больше нельзя использовать ни для ввода, ни для вывода, хотя реализация не может повторно использовать занимаемую им память, пока на него существуют ссылки. Дескрипторы принадлежат к классам Show и Eq. Строка, полученная при отображении дескриптора, зависит от системы; она должна содержать достаточно сведений для идентификации дескриптора при отладке. Согласно == дескриптор равен только самому себе; сравнение внутреннего состояния разных дескрипторов на равенство не выполняется.

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

FileHandle FilePath !(MVar Handle__)
DuplexHandle FilePath !(MVar Handle__) !(MVar Handle__)
Экземпляры
Подробности экземпляров
Eq Handle Источник

Начиная с: base-4.1.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

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

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

Show Handle Источник

Начиная с: base-4.1.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

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

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

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

data Handle__ Источник

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

(RawIO dev, IODevice dev, BufferedIO dev, Typeable dev) => Handle__

Поля

  • haDevice :: !dev
  • haType :: HandleType
  • haByteBuffer :: !(IORef (Buffer Word8))
  • haBufferMode :: BufferMode
  • haLastDecode :: !(IORef (dec_state, Buffer Word8))

    Буфер байтов непосредственно перед последней операцией декодирования.

  • haCharBuffer :: !(IORef (Buffer CharBufElem))
  • haBuffers :: !(IORef (BufferList CharBufElem))
  • haEncoder :: Maybe (TextEncoder enc_state)
  • haDecoder :: Maybe (TextDecoder dec_state)
  • haCodec :: Maybe TextEncoding
  • haInputNL :: Newline
  • haOutputNL :: Newline
  • haOtherSide :: Maybe (MVar Handle__)

showHandle :: FilePath -> String -> String Источник

checkHandleInvariants :: Handle__ -> IO () Источник

data BufferList e Источник

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

BufferListNil
BufferListCons (RawBuffer e) (BufferList e)

data HandleType Источник

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

ClosedHandle
SemiClosedHandle
ReadHandle
WriteHandle
AppendHandle
ReadWriteHandle
Экземпляры
Подробности экземпляров
Show HandleType Источник

Начиная с: base-4.1.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

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

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

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

isReadableHandleType :: HandleType -> Bool Источник

isReadableHandleType hdlType возвращает True, если hdlType является одним из ReadHandle и ReadWriteHandle.

isWritableHandleType :: HandleType -> Bool Источник

isWritableHandleType hdlType возвращает True, если hdlType является одним из AppendHandle, WriteHandle и ReadWriteHandle.

isReadWriteHandleType :: HandleType -> Bool Источник

isReadWriteHandleType hdlType возвращает True, если hdlType является ReadWriteHandle.

isAppendHandleType :: HandleType -> Bool Источник

isAppendHandleType hdlType возвращает True, если hdlType является AppendHandle.

data BufferMode Источник

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

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

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

Аналогичным образом ввод выполняется в соответствии с режимом буферизации дескриптора:

  • построчная буферизация: если буфер дескриптора не пуст, следующий элемент берётся из буфера; если буфер пуст, в него считываются символы вплоть до следующего символа новой строки включительно. Символы недоступны, пока не будет получен символ новой строки или буфер не заполнится.
  • блочная буферизация: когда буфер дескриптора опустеет, следующий блок данных считывается в буфер.
  • без буферизации: следующий элемент ввода считывается и возвращается. Операция hLookAhead подразумевает, что даже для дескриптора без буферизации может потребоваться односивольный буфер.

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

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

NoBuffering

буферизация отключена, если это возможно.

LineBuffering

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

BlockBuffering (Maybe Int)

блочная буферизация должна быть включена, если это возможно. Размер буфера составляет n элементов, если аргумент равен Just n; в противном случае он зависит от реализации.

Экземпляры
Подробности экземпляров
Eq BufferMode Источник

Начиная с: base-4.2.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

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

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

Ord BufferMode Источник

Начиная с: base-4.2.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

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

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

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

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

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

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

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

Read BufferMode Источник

Начиная с: base-4.2.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

readsPrec :: Int -> ReadS BufferMode Источник

readList :: ReadS [BufferMode] Источник

readPrec :: ReadPrec BufferMode Источник

readListPrec :: ReadPrec [BufferMode] Источник

Show BufferMode Источник

Начиная с: base-4.2.0.0

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

Определён в GHC.Internal.IO.Handle.Types

Методы

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

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

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

data BufferCodec from to state Источник

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

BufferCodec#

Поля

  • encode# :: CodeBuffer# from to

    Функция encode преобразует элементы буфера from в буфер to. Она должна преобразовать как можно больше элементов с учётом размеров буферов, в том числе преобразовать ноль элементов, если в to недостаточно места или from не содержит полной многобайтовой последовательности.

    Если возможны несколько вариантов возвращаемого значения CodingProgress, следует предпочесть OutputUnderflow значению InvalidSequence. Это позволяет библиотеке ввода-вывода GHC предполагать, что при обнаружении InvalidSequence в выходном буфере доступен как минимум один элемент.

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

  • recover# :: Buffer from -> Buffer to -> State# RealWorld -> (# State# RealWorld, Buffer from, Buffer to #)

    Функция recover используется для продолжения декодирования при наличии недопустимых или непредставимых последовательностей. К ним относятся как последовательности, обнаруженные при возврате InvalidSequence функцией encode, так и последовательности, возникающие из-за того, что входная последовательность байтов выглядит усечённой.

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

    Функция recover может вызвать исключение вместо пропуска элементов.

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

    С версии: base-4.4.0.0

  • close# :: IO ()

    Теперь можно освободить ресурсы, связанные с кодировкой. После вызова close функцию encode вызывать нельзя.

  • getState# :: IO state

    Возвращает текущее состояние кодека.

    Многие кодеки не имеют состояния, и в таких случаях его можно представить как (). Другие кодеки хранят состояние. Например, UTF-16 распознаёт символ BOM (маркер порядка байтов) в начале входных данных и запоминает, следует ли далее использовать режим с прямым или обратным порядком байтов. В этом случае состояние кодека содержит две части информации: находимся ли мы в начале потока (BOM встречается только в начале) и, если нет, следует ли использовать кодировку с прямым или обратным порядком байтов.

  • setState# :: state -> IO ()

Связанные шаблоны

pattern BufferCodec :: CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state

data NewlineMode Исходный код

Определяет преобразование символов новой строки (если оно выполняется) между внутренними строками и внешним файлом или потоком. Предполагается, что в строках Haskell символ новой строки представлен символом '\n'; режим перевода строк задаёт, как преобразовывать '\n' при выводе и во что преобразовывать при вводе '\n'.

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

NewlineMode

Поля

  • inputNL :: Newline

    представление символов новой строки при вводе

  • outputNL :: Newline

    представление символов новой строки при выводе

Экземпляры
Сведения об экземплярах
Eq NewlineMode Исходный код

С версии: base-4.2.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

(==) :: NewlineMode -> NewlineMode -> Bool Исходный код

(/=) :: NewlineMode -> NewlineMode -> Bool Исходный код

Ord NewlineMode Исходный код

С версии: base-4.3.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

compare :: NewlineMode -> NewlineMode -> Ordering Исходный код

(<) :: NewlineMode -> NewlineMode -> Bool Исходный код

(<=) :: NewlineMode -> NewlineMode -> Bool Исходный код

(>) :: NewlineMode -> NewlineMode -> Bool Исходный код

(>=) :: NewlineMode -> NewlineMode -> Bool Исходный код

max :: NewlineMode -> NewlineMode -> NewlineMode Исходный код

min :: NewlineMode -> NewlineMode -> NewlineMode Исходный код

Read NewlineMode Исходный код

С версии: base-4.3.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

readsPrec :: Int -> ReadS NewlineMode Исходный код

readList :: ReadS [NewlineMode] Исходный код

readPrec :: ReadPrec NewlineMode Исходный код

readListPrec :: ReadPrec [NewlineMode] Исходный код

Show NewlineMode Исходный код

С версии: base-4.3.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

showsPrec :: Int -> NewlineMode -> ShowS Исходный код

show :: NewlineMode -> String Исходный код

showList :: [NewlineMode] -> ShowS Исходный код

data Newline Исходный код

Представление символа новой строки во внешнем файле или потоке.

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

LF
'\n'
CRLF
'\r\n'
Экземпляры
Сведения об экземплярах
Eq Newline Исходный код

С версии: base-4.2.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

(==) :: Newline -> Newline -> Bool Исходный код

(/=) :: Newline -> Newline -> Bool Исходный код

Ord Newline Исходный код

С версии: base-4.3.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

compare :: Newline -> Newline -> Ordering Исходный код

(<) :: Newline -> Newline -> Bool Исходный код

(<=) :: Newline -> Newline -> Bool Исходный код

(>) :: Newline -> Newline -> Bool Исходный код

(>=) :: Newline -> Newline -> Bool Исходный код

max :: Newline -> Newline -> Newline Исходный код

min :: Newline -> Newline -> Newline Исходный код

Read Newline Исходный код

С версии: base-4.3.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

readsPrec :: Int -> ReadS Newline Исходный код

readList :: ReadS [Newline] Исходный код

readPrec :: ReadPrec Newline Исходный код

readListPrec :: ReadPrec [Newline] Исходный код

Show Newline Исходный код

С версии: base-4.3.0.0

Сведения об экземпляре

Определён в GHC.Internal.IO.Handle.Types

Методы

showsPrec :: Int -> Newline -> ShowS Исходный код

show :: Newline -> String Исходный код

showList :: [Newline] -> ShowS Исходный код

nativeNewline :: Newline Исходный код

Представление символа новой строки, принятое на текущей платформе: LF в Unix-системах, CRLF в Windows.

universalNewlineMode :: NewlineMode Исходный код

Преобразует '\r\n' в '\n' при вводе, а '\n' — в представление символа новой строки, принятое на платформе, при выводе. Этот режим можно использовать на любой платформе; он работает с текстовыми файлами, в которых применяются любые соглашения о символах новой строки. Недостаток заключается в том, что readFile >>= writeFile может привести к созданию другого файла.

universalNewlineMode  = NewlineMode { inputNL  = CRLF,
                                      outputNL = nativeNewline }

noNewlineTranslation :: NewlineMode Исходный код

Не выполнять преобразование символов новой строки.

noNewlineTranslation  = NewlineMode { inputNL  = LF, outputNL = LF }

nativeNewlineMode :: NewlineMode Исходный код

Использовать представление символа новой строки, принятое на платформе, как при вводе, так и при выводе.

nativeNewlineMode  = NewlineMode { inputNL  = nativeNewline
                                   outputNL = nativeNewline }

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/GHC-IO-Handle-Types.html

Spec-Zone.ru

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