Spec-Zone.ru › Haskell 8

GHC.IO.Handle.Типы

Авторские права (c) Университет Глазго 1994-2009
Лицензия см. libraries/base/LICENSE
Поддержка libraries@haskell.org
Стабильность внутренняя
Переносимость непереносимая
Безопасный Haskell Надёжный
Язык Haskell2010

Описание

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

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.IO.Handle.Types

Методы

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

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

Show Handle

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

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

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

Методы

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

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

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

data Handle__ Источник

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

forall dev enc_state dec_state.(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 :: Может (TextEncoder enc_state)
  • haDecoder :: Может (TextDecoder dec_state)
  • haCodec :: Может TextEncoding
  • haInputNL :: Newline
  • haOutputNL :: Newline
  • haOtherSide :: Может (MVar Handle__)

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

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

data BufferList e Источник

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

BufferListNil
BufferListCons (RawBuffer e) (BufferList e)

data HandleType Source

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

ClosedHandle
SemiClosedHandle
ReadHandle
WriteHandle
AppendHandle
ReadWriteHandle
Примеры использования
Подробности примеров
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 (МожетБыть ЦелоеЧисло)

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

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

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

readListPrec :: ReadPrec [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

Поля

  • encode :: CodeBuffer from to

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

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

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

  • recover :: Buffer from -> Buffer to -> IO (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-endian или little-endian.

  • setState :: state -> IO ()

data NewlineMode Source

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

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

NewlineMode

Поля

  • inputNL :: Newline

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

  • outputNL :: Newline

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

Примеры
Подробности примеров
Eq NewlineMode

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

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

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

Методы

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

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

Ord NewlineMode

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

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

Определено в GHC.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.IO.Handle.Types

Методы

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

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

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

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

Show NewlineMode

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

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

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

Методы

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

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

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

data НоваяСтрока Источник

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

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

LF
'\n'
CRLF
'\r\n'
Примеры использования
Подробности примеров использования
Eq Newline

С момента выпуска: base-4.2.0.0

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

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

Методы

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

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

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

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

readListPrec :: ReadPrec [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

Spec-Zone.ru

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