Spec-Zone.ru › Haskell 9

GHC.IO.Handle.Types

Авторские права (c) Университет Глазго 1994-2009
Лицензия см. libraries/base/LICENSE
Поддерживающий libraries@haskell.org
Стабильность внутренняя
Переносимость непереносимая
Safe 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__)
Примеры
Подробности примеров
Show Handle Источник

С версии: base-4.1.0.0

Подробности примера

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

Методы

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

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

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

Eq Handle Источник

С версии: base-4.1.0.0

Подробности примера

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

Методы

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

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

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 () Source

data BufferList e Source

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

BufferListNil
BufferListCons (RawBuffer e) (BufferList e)

data HandleType Source

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

ClosedHandle
SemiClosedHandle
ReadHandle
WriteHandle
AppendHandle
ReadWriteHandle
Примеры
Подробности примеров
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)

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

Примеры
Подробности примеров
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 Исходный код

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 Исходный код

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 используется для продолжения декодирования в случае неверных или неприводимых последовательностей. Это включает те, которые обнаружены функцией encode возвращающей значение InvalidSequence, и те, которые возникают из-за того, что входная последовательность байтов, похоже, обрезана.

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

    recover может вызвать исключение вместо пропуска чего-либо.

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

    С версии: base-4.4.0.0

  • close# :: IO ()

    Ресурсы, связанные с кодированием, теперь могут быть освобождены. Функция encode больше не должна вызываться после вызова close.

  • getState# :: IO state

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

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

  • 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 Source

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

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

NewlineMode

Поля

  • inputNL :: Newline

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

  • outputNL :: Newline

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

Примеры
Подробности примеров
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 Исходный код

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 Исходный код

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

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

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

LF
'\n'
CRLF
'\r\n'
Примеры
Подробности примеров
Read Новая строка Исходный код

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

Подробности примера

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

Методы

readsPrec :: Int -> ReadS Новая строка Исходный код

readList :: ReadS [Новая строка] Исходный код

readPrec :: ReadPrec Новая строка Исходный код

readListPrec :: ReadPrec [Новая строка] Исходный код

Show Новая строка Исходный код

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

Подробности примера

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

Методы

showsPrec :: Int -> Новая строка -> ShowS Исходный код

show :: Новая строка -> Строка Исходный код

showList :: [Новая строка] -> ShowS Исходный код

Eq Новая строка Исходный код

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

Подробности примера

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

Методы

(==) :: Новая строка -> Новая строка -> Булево Исходный код

(/=) :: Новая строка -> Новая строка -> Булево Исходный код

Ord Новая строка Исходный код

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

Подробности примера

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

Методы

compare :: Новая строка -> Новая строка -> Порядок Исходный код

(<) :: Новая строка -> Новая строка -> Булево Исходный код

(<=) :: Новая строка -> Новая строка -> Булево Исходный код

(>) :: Новая строка -> Новая строка -> Булево Исходный код

(>=) :: Новая строка -> Новая строка -> Булево Исходный код

max :: Новая строка -> Новая строка -> Новая строка Исходный код

min :: Новая строка -> Новая строка -> Новая строка Исходный код

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 :: Режим новой строки Исходный код

Используйте собственное представление новой строки как на входе, так и на выходе

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

Spec-Zone.ru

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