Главная » Haskell » Модуль IO

0

является экспериментальным, созданным для разгрузки стандартного модуля Prelude  от многочисленных определений.  Разумеется, что в этот модуль собраны определения всех программных сущностей, связанных с системой ввода/вывода  языка Haskell. Сюда перенесены все стандартные функции и типы, а также определены новые, которых нет в стандартном модуле Prelude. С другой стороны, все функции из стандартного модуля Prelude,  которые имеют отношение к вводу/выводу, также определены в этом модуле, поэтому ниже рассматриваться не будут.

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

Использование модуля:

import  System.IO

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

Тип: FilePath

Описание: синоним типа String для удобства именования типа, представляющих пути к файлам.

Определение:

type  FilePath  =  String

Тип: Handle

Описание:  примитивный  тип  для  представления дескрипторов   источников или пунктов назначения информации в системе  ввода/вывода. Такими  источниками могут быть файлы или потоки.

Определение:

data  Handle =  …

Тип определён в виде примитива.

Для типа Handle определены экземпляры классов Data, Eq, Show и Typeable.

Функция: stdin

Описание: возвращает стандартный поток ввода.

Определение:

stdin  ::  Handle

Функция: stdout

Описание: возвращает стандартный поток вывода.

Определение:

stdout  ::  Handle

Функция: stderr

Описание: возвращает стандартный поток вывода сообщений об ошибках.

Определение:

stderr  ::  Handle

Функция: openFile

Описание:  открывает  заданный по  имени файл  в  заданном   режиме,  возвращая дескриптор этого файла. Функция  может  сгенерировать исключение в следующих случаях: файл уже  открыт  и  не может быть открыт  повторно (isAlreadyInUseError); файл не существует (isDoesNotExistError); а также ес-

ли нет прав доступа для открытия файла (isPermissionError).  Если имеется необходимость работать с бинарными файлами, то вместо этой функции необходимо пользоваться функцией openBinaryFile (см. стр. 495).

Определение:

openFile :: FilePath ->  IOMode  ->  IO Handle

Тип: IOMode

Описание: тип для представления режимов открытия файла. Каждый конструктор в этом перечислении представляет один из доступных режимов: на чтение, на запись, на дописывание информации в файл, а также на одновременное чтение и запись.

Определение:

data  IOMode

=  ReadMode

|  WriteMode

|  AppendMode

| ReadWriteMode

Функция: hClose

Описание: закрывает заданный по дескриптору файл. Перед тем как действие по закрытию выполнится, все буферизованные данные будут записаны в файл так, как будто бы запущена функция hFlush (см. стр. 490). Попытка закрытия файла, который уже закрыт, ни к чему не приводит и не генерирует исключений. Все другие действия с закрытыми файлами приведут к исключениям. Если же по какой-либо причине во время выполнения этой функции происходит исключение, файл закрывается в любом случае (но не факт, что  буфферизованные данные в него будут записаны).

Определение:

hClose  ::  Handle ->  IO  ()

Функция: hFileSize

Описание: возвращает размер заданного файла в байтах.

Определение:

hFileSize :: Handle  ->  IO Integer

Функция: hSetFileSize

Описание: обрезает заданный файл до заданного количества  байт (по размеру файла). Попытка  установить размер файла больше, чем  имеется на текущий момент, не имеет эффекта.

Определение:

hSetFileSize :: Handle ->  Integer  ->  IO ()

Функция: hIsEOF

Описание: возвращает значение IO True в случае, если в заданном  открытом файле достигнут его конец.

Определение:

hIsEOF :: Handle ->  IO Bool

Функция: isEOF

Описание: вариант функции hIsEOF для стандартного потока ввода stdin.

Определение:

isEOF :: IO  Bool isEOF =  hIsEOF stdin

Тип: BufferMode

Описание: тип для представления режима буферизации файла. Для использования предлагается три способа буферизации:  без неё, построчная буферизация и буферизация блоками заданного размера.

Определение:

data  BufferMode

=  NoBuffering

|  LineBuffering

| BlockBuffering (Maybe Int)

Данный тип является экземпляром следующих классов: Eq, Ord, Read и Show.

Функция: hSetBuffering

Описание: устанавливает для  заданного файла заданный режим  буферизации.  Данная  функция  может  сгенерировать исключение в  случае, если архитектура  не  позволяет менять режим  буферизации  на  открытых  файлах (isPermissionError).

Определение:

hSetBuffering :: Handle ->  BufferMode  ->  IO ()

Функция: hGetBuffering

Описание: возвращает текущий режим буферизации для заданного файла.

Определение:

hGetBuffering :: Handle ->  IO BufferMode

Функция: hFlush

Описание: очищает буфер, записывая все данные из него в  заданный файл. Эта функция может сгенерировать исключения в  следующих случаях: устройство  вывода заполнено (isFullError);   достигнут  предел ресурсов системы (isPermissionError).

Определение:

hFlush  :: Handle ->  IO ()

Тип: HandlePosn

Описание: представляет местоположение маркера в некотором файле.

Определение:

data  HandlePosn = HandlePosn Handle Int deriving Eq

Функция: hGetPosn

Описание: возвращает положение маркера в заданном файле.

Определение:

hGetPosn :: Handle ->  IO HandlePosn

Функция: hSetPosn

Описание: устанавливает маркер на заданную позицию в файле (файл определяется непосредственно в описании позиции). Функция может сгенерировать исключение в случае превышения ресурсов системы (isPermissionError). Определение:

hSetPosn :: HandlePosn ->  IO ()

Тип: SeekMode

Описание: тип для представления режима поиска маркера в файле. Используется в функции hSeek. Первый конструктор устанавливает смещение от начала файла. Второй — от текущей позиции в файле. Третий — от конца файла в обратную сторону.

Определение:

data  SeekMode

=  AbsoluteSeek

|  RelativeSeek

|  SeekFromEnd

Для этого типа определены экземпляры следующих классов: Enum, Eq, Ix, Ord,

Read и Show.

Функция: hSeek

Описание: устанавливает маркер в заданном файле на заданную позицию в зависимости от режима поиска. Функция может сгенерировать исключение в случае превышения ресурсов системы (isPermissionError).

Определение:

hSeek :: Handle ->  SeekMode  ->  Integer  ->  IO ()

Функция: hIsOpen

Описание: возвращает значение IO True в случае, если заданный файл открыт.

Определение:

hIsOpen :: Handle ->  IO Bool

Функция: hIsClosed

Описание: возвращает значение IO True в случае, если заданный файл закрыт.

Определение:

hIsClosed   :: Handle ->  IO Bool

Функция: hIsReadable

Описание: возвращает значение IO True в случае, если заданный файл  может быть открыт для чтения.

Определение:

hIsReadable  :: Handle ->  IO Bool

Функция: hIsWritable

Описание: возвращает значение IO True в случае, если заданный  файл может быть открыт для записи.

Определение:

hIsWritable :: Handle ->  IO Bool

Функция: hIsSeekable

Описание: возвращает значение IO True в случае, если в заданном файле можно манипулировать маркером.

Определение:

hIsSeekable  :: Handle ->  IO Bool

Функция: hIsTerminalDevice

Описание: возвращает значение IO True в случае, если заданный  дескриптор указывает на открытый терминал.

Определение:

hIsTerminalDevice :: Handle ->  IO Bool

Функция: hSetEcho

Описание: устанавливает режим отображения символов в заданном терминале.

Определение:

hSetEcho :: Handle ->  Bool  ->  IO ()

Функция: hGetEcho

Описание: возвращает режим отображения символов в заданном терминале (значение IO True возвращается в случае, если символы выводятся на экран. Определение:

hGetEcho :: Handle ->  IO Bool

Функция: hShow

Описание: возвращает в виде строки полный статус заданного дескриптора.

Определение:

hShow  :: Handle ->  IO  String

Функция: hWaitForInput

Описание: возвращает значение IO True в случае, если заданный файл доступен для чтения. Иначе ожидает заданное количество миллисекунд, после чего возвращает значение IO False. Если заданное количество миллисекунд меньше нуля, функция будет ожидать бесконечно. Функция может сгенерировать исключение в случае достижения конца файла (isEOFError).

Определение:

hWaitForInput :: Handle ->  Int  ->  IO Bool

Функция: hReady

Описание: возвращает значение IO True в случае, если из заданного файла доступно для чтения хотя бы одно значение. Функция может сгенерировать исключение в случае достижения конца файла (isEOFError).

Определение:

hReady :: Handle ->  IO Bool hReady h =  hWaitForInput h 0

Функция: hGetChar

Описание: возвращает один символ из заданного файла, блокируя его до тех пор, пока символ не становится доступным. Функция может сгенерировать исключение в случае достижения конца файла (isEOFError).

Определение:

hGetChar :: Handle ->  IO Char

Функция: hGetLine

Описание: возвращает одну строку (до символа EOL) из заданного файла, блокируя  его до тех пор, пока символ не становится  доступным. Функция  может сгенерировать исключение в случае достижения конца файла (isEOFError).  Определение:

hGetLine  :: Handle ->  IO  String

Функция: hLookAhead

Описание: возвращает один символ из заданного потока, блокируя  его до возможности считать символ. Сам символ не вынимается из потока. Функция может сгенерировать исключение в случае достижения конца файла (isEOFError).  Определение:

hLookAhead :: Handle ->  IO Char

Функция:  hGetContents

Описание: возвращает всё содержимое заданного файла или потока в виде одной строки, начиная с текущей позиции маркера. Функция может сгенерировать исключение в случае, если маркер стоит на конце файла (isEOFError).  Определение:

hGetContents  :: Handle ->  IO String

Функция: hPutChar

Описание: записывает заданный символ в заданный файл. Во внимание принимается режим буферизации файла, поэтому символ может быть записан не сразу. Функция  может сгенерировать  исключение в следующих случаях: устройство вывода переполнено  (isFullError) или нет доступа к устройству вывода (isPermissionError).

Определение:

hPutChar :: Handle ->  Char ->  IO ()

Функция: hPutStr

Описание: записывает заданную строку в заданный файл. Во внимание принимается режим буферизации файла, поэтому строка может быть записана не сразу. Функция  может сгенерировать  исключение в следующих случаях: устройство вывода переполнено  (isFullError) или нет доступа к устройству вывода (isPermissionError).

Определение:

hPutStr :: Handle ->  String ->  IO ()

Функция: hPutStrLn

Описание: вариант функции hPutStr,  добавляющий в конце  заданной строки символ перевода строки.

Определение:

hPutStrLn   :: Handle ->  String ->  IO () hPutStrLn   hndl  str = do  hPutStr   hndl  str

hPutChar hndl  ’\n’

Функция: hPrint

Описание: вариант функции hPutStr,  получающий на вход значение произвольного типа, имеющего экземпляр класса Show (то есть значения этого типа могут быть преобразованы в строку), после чего выводящий строку в заданный файл. Определение:

hPrint :: Show  a => Handle ->  a  ->  IO () hPrint hdl  = hPutStrLn  hdl  . show

Функция: openBinaryFile

Описание: открывает файл, заданный по имени, в бинарном режиме. Это позволяет избежать некоторых нежелательных системных преобразований символов перевода строки. Возвращает дескриптор файла.

Определение:

openBinaryFile :: FilePath ->  IOMode  ->  IO  Handle

Функция: hSetBinaryMode

Описание: для заданного файла устанавливает режим доступа на бинарный (второй аргумент — True) или текстовый (второй аргумент  — False, соответственно). Определение:

hSetBinaryMode :: Handle ->  Bool  ->  IO ()

Функция: hPutBuf

Описание: записывает в заданный файл определённое количество данных, взятых по заданному указателю. Функция может сгенерировать исключение,  если по указателю нет данных (ResourceVanished).

Определение:

hPutBuf  :: Handle ->  Ptr   a ->  Int  ->  IO ()

Функция: hGetBuf

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

hGetBuf :: Handle ->  Ptr   a ->  Int ->  IO Int

Функция: hPutBufNonBlocking

Описание: вариант функции  hPutBuf,  который  не блокирует  заданный файл во время записи.

Определение:

hPutBufNonBlocking  :: Handle ->  Ptr   a ->  Int ->  IO Int

Функция:  hGetBufNonBlocking

Описание: вариант функции  hGetBuf, который  не блокирует  заданный файл во время чтения.

Определение:

hGetBufNonBlocking  :: Handle ->  Ptr   a ->  Int ->  IO Int

Функция: openTempFile

Описание: открывает временный файл в заданном каталоге и с заданным именем. Возвращает пару, состоящую из полного пути к новому временному файлу и его дескриптора. Открытие файла происходит в режиме одновременного чтения и записи.

Определение:

openTempFile :: FilePath ->  String ->  IO (FilePath,  Handle)

Функция:  openBinaryTempFile

Описание: вариант функции openTempFile, открывающий временный файл в бинарном режиме.

Определение:

openBinaryTempFile  :: FilePath ->  String ->  IO (FilePath,  Handle)

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии