GHC.IO.Handle.Типы
| Авторские права | (c) Университет Глазго 1994-2009 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | libraries@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Описание
Базовые типы для реализации объектов ввода-вывода.
Haskell определяет операции чтения и записи символов из файлов и в файлы, представленные значениями типа Handle. Каждое значение этого типа — это дескриптор: запись, используемая системой выполнения Haskell для управления вводом-выводом с файловыми объектами. Дескриптор имеет, по меньшей мере, следующие свойства:
- управление вводом, выводом или обоими;
- открыт, закрыт или полузакрыт;
- объект может быть позиционирован;
- буферизация отключена или включена по строкам или блокам;
- буфер (длина которого может быть равна нулю).
Большинство дескрипторов также имеют текущую позицию ввода-вывода, указывающую, где произойдёт следующая операция ввода или вывода. Дескриптор является читаемым, если он управляет только вводом или и вводом и выводом; аналогично, он является записываемым, если он управляет только выводом или и вводом и выводом. Дескриптор является открытым при первом выделении. После закрытия он больше не может использоваться для ввода или вывода, хотя реализация не может повторно использовать его память, пока на него есть ссылки. Дескрипторы находятся в классах Show и Eq. Строка, полученная при отображении дескриптора, зависит от системы; она должна содержать достаточно информации для идентификации дескриптора при отладке. Дескриптор равен, согласно ==, только самому себе; не делается попыток сравнить внутреннее состояние разных дескрипторов для равенства.
Конструкторы
| FileHandle FilePath !(MVar Handle__) | |
| DuplexHandle FilePath !(MVar Handle__) !(MVar Handle__) |
Конструкторы
| forall dev enc_state dec_state.(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 Source
Примеры использования
| Show HandleType | Since: base-4.1.0.0 |
Определено в GHC.IO.Handle.Types МетодыshowsPrec :: Int -> HandleType -> ShowS Source show :: HandleType -> String Source showList :: [HandleType] -> ShowS Source | |
isReadableHandleType :: HandleType -> Bool Source
isWritableHandleType :: HandleType -> Bool Source
isReadWriteHandleType :: HandleType -> Bool Source
data РежимБуферизации Source
Поддерживаются три вида буферизации: строчная, блочная или отсутствие буферизации. Эти режимы оказывают следующее влияние. Для вывода элементы записываются или сбрасываются из внутреннего буфера в соответствии с режимом буферизации:
-
строчная буферизация: весь буфер вывода сбрасывается всякий раз, когда выводится символ новой строки, буфер переполняется, выдается
hFlush, или дескриптор файла закрывается. -
блочная буферизация: весь буфер записывается, когда он переполняется, выдается
hFlush, или дескриптор файла закрывается. - отсутствие буферизации: вывод записывается немедленно и никогда не хранится в буфере.
Реализация может сбрасывать буфер чаще, но не реже, чем указано выше. Буфер вывода очищается как только он был записан.
Аналогично, ввод происходит в соответствии с режимом буферизации для дескриптора файла:
- строчная буферизация: когда буфер дескриптора файла не пуст, следующий элемент берется из буфера; в противном случае, когда буфер пуст, символы до и включая следующий символ новой строки читаются в буфер. Никакие символы недоступны, пока символ новой строки не станет доступным или буфер не заполнится.
- блочная буферизация: когда буфер дескриптора файла становится пустым, следующий блок данных читается в буфер.
-
отсутствие буферизации: следующий элемент ввода читается и возвращается. Операция
hLookAheadподразумевает, что даже для дескриптора файла без буферизации может потребоваться буфер размером один символ.
По умолчанию режим буферизации при открытии дескриптора файла зависит от реализации и может зависеть от объекта файловой системы, который прикреплен к этому дескриптору. Для большинства реализаций физические файлы обычно будут иметь блочную буферизацию, а терминалы обычно будут иметь строчную буферизацию.
Конструкторы
| NoBuffering | буферизация отключена, если это возможно. |
| LineBuffering | строчная буферизация должна быть включена, если это возможно. |
| BlockBuffering (МожетБыть ЦелоеЧисло) | блочная буферизация должна быть включена, если это возможно. Размер буфера составляет |
Примеры
| Eq BufferMode | С момента: base-4.2.0.0 |
Определено в GHC.IO.Handle.Types Методы(==) :: BufferMode -> BufferMode -> Bool Источник (/=) :: BufferMode -> BufferMode -> Bool Источник | |
| Ord BufferMode | С момента: base-4.2.0.0 |
Определено в GHC.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.IO.Handle.Types МетодыreadsPrec :: Int -> ReadS BufferMode Источник readList :: ReadS [BufferMode] Источник | |
| Show BufferMode | С момента: base-4.2.0.0 |
Определено в GHC.IO.Handle.Types МетодыshowsPrec :: Int -> BufferMode -> ShowS Источник show :: BufferMode -> String Источник showList :: [BufferMode] -> ShowS Источник | |
data BufferCodec from to state Источник
Конструкторы
| BufferCodec | |
Поля
| |
data NewlineMode Source
Указывает преобразование, если таковое имеется, символов новой строки между внутренними строками и внешним файлом или потоком. Строки Haskell предполагается представляют новые строки символом '\n'; режим новой строки определяет, как преобразовать '\n' при выводе и что преобразовать в '\n' при вводе.
Конструкторы
| NewlineMode | |
Примеры
data НоваяСтрока Источник
Представление новой строки во внешнем файле или потоке.
Примеры использования
| Eq Newline | С момента выпуска: base-4.2.0.0 |
Определено в GHC.IO.Handle.Types | |
| Ord Newline | С момента выпуска: base-4.3.0.0 |
Определено в GHC.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.IO.Handle.Types МетодыreadsPrec :: Int -> ReadS Newline Исходный код readList :: ReadS [Newline] Исходный код | |
| Show Newline | С момента выпуска: base-4.3.0.0 |
Определено в GHC.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/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-IO-Handle-Types.html