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, поскольку интерфейс может быстро изменяться без особого предупреждения.
В Haskell определены операции чтения и записи символов из файлов и в файлы, представленные значениями типа Handle. Каждое значение этого типа является дескриптором: записью, используемой системой времени выполнения Haskell для управления вводом-выводом объектов файловой системы. Дескриптор обладает как минимум следующими свойствами:
- управляет ли он вводом, выводом или и тем и другим;
- является ли он открытым, закрытым или полузакрытым;
- поддерживает ли объект позиционирование;
- отключена ли буферизация или включена построчная либо блочная буферизация;
- буфер (длина которого может быть равна нулю).
Большинство дескрипторов также имеют текущую позицию ввода-вывода, указывающую, где будет выполнена следующая операция ввода или вывода. Дескриптор является читаемым, если он управляет только вводом либо вводом и выводом; аналогично, он является записываемым, если управляет только выводом либо вводом и выводом. Дескриптор открыт сразу после выделения. После закрытия его больше нельзя использовать ни для ввода, ни для вывода, хотя реализация не может повторно использовать занимаемую им память, пока на него существуют ссылки. Дескрипторы принадлежат к классам Show и Eq. Строка, полученная при отображении дескриптора, зависит от системы; она должна содержать достаточно сведений для идентификации дескриптора при отладке. Согласно == дескриптор равен только самому себе; сравнение внутреннего состояния разных дескрипторов на равенство не выполняется.
Конструкторы
| FileHandle FilePath !(MVar Handle__) | |
| DuplexHandle FilePath !(MVar Handle__) !(MVar Handle__) |
Конструкторы
| (RawIO dev, IODevice dev, BufferedIO dev, Typeable dev) => Handle__ | |
Поля
| |
showHandle :: FilePath -> String -> String Источник
checkHandleInvariants :: Handle__ -> IO () Источник
data BufferList e Источник
Конструкторы
| BufferListNil | |
| BufferListCons (RawBuffer e) (BufferList e) |
data HandleType Источник
Экземпляры
| 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) | блочная буферизация должна быть включена, если это возможно. Размер буфера составляет |
Экземпляры
data BufferCodec from to state Источник
Конструкторы
| BufferCodec# | |
Поля
| |
Связанные шаблоны
| 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 | |
Экземпляры
data Newline Исходный код
Представление символа новой строки во внешнем файле или потоке.
Экземпляры
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