GHC.IO.Handle.Types
| Авторские права | (c) Университет Глазго 1994-2009 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддерживающий | libraries@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая |
| Safe 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 () Source
data BufferList e Source
Конструкторы
| BufferListNil | |
| BufferListCons (RawBuffer e) (BufferList e) |
data HandleType Source
Примеры
| Show HandleType Source | Since: base-4.1.0.0 |
Определено в GHC.Internal.IO.Handle.Types МетодыshowsPrec :: Int -> HandleType -> ShowS Source show :: HandleType -> String Source showList :: [HandleType] -> ShowS Source | |
isReadableHandleType :: HandleType -> Bool Source
Возвращает True, если hdlType является одним из ReadHandle и ReadWriteHandle.
isWritableHandleType :: HandleType -> Bool Source
Возвращает True, если hdlType является одним из AppendHandle, WriteHandle и ReadWriteHandle.
isReadWriteHandleType :: HandleType -> Bool Source
Возвращает True, если hdlType является ReadWriteHandle.
isAppendHandleType :: HandleType -> Bool Source
Возвращает True, если hdlType является AppendHandle.
data BufferMode Source
Поддерживаются три вида буферизации: строчная, блочная или отсутствие буферизации. Эти режимы оказывают следующее воздействие. Для вывода элементы записываются или сбрасываются из внутреннего буфера в соответствии с режимом буферизации:
-
строчная буферизация: весь буфер вывода сбрасывается всякий раз, когда выводится символ новой строки, буфер переполняется, вызывается
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 Source
Определяет преобразование, если таковое имеется, символов новой строки между внутренними строками и внешним файлом или потоком. Предполагается, что Haskell строки представляют символы новой строки символом '\n'; режим новой строки определяет, как преобразовать '\n' при выводе, и что преобразовать в '\n' при вводе.
Конструкторы
| NewlineMode | |
Примеры
data Newline Исходный код
Представление новой строки во внешнем файле или потоке.
Примеры
nativeNewline :: Новая строка Исходный код
Представление новой строки для текущей платформы: LF на системах Unix, CRLF на Windows.
universalNewlineMode :: Режим новой строки Исходный код
Преобразовать '\r\n' в '\n' при вводе и '\n' в символ новой строки на выходе. Этот режим может быть использован на любой платформе и работает с текстовыми файлами, использующими любой вид разделителей строк. Недостатком является то, что readFile >>= writeFile может привести к изменению файла.
universalNewlineMode = NewlineMode { inputNL = CRLF,
outputNL = nativeNewline }
noNewlineTranslation :: Режим новой строки Исходный код
Не выполнять никакого преобразования новой строки.
noNewlineTranslation = NewlineMode { inputNL = LF, outputNL = LF }
Используйте собственное представление новой строки как на входе, так и на выходе
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.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-IO-Handle-Types.html