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

0

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

import Text.Printf

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

Функция: printf

Описание: форматирует произвольное количество аргументов в стиле языка C. Функция может вернуть значение типа String либо IO a.

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

printf :: (PrintfType r) =>  String ->  r printf fmt  = spr  fmt  []

Функция: hPrintf

Описание: вариант функции printf,  выводящий результат в  заданный  поток (файл) по дескриптору.

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

hPrintf :: (HPrintfType r) => Handle ->  String ->  r hPrintf hdl  fmt  = hspr  hdl  fmt  []

Строка форматирования для использования в функциях printf и hprintf состоит из обычных символов, расположенных согласно спецификации форматирования. Спецификация форматирования начинается с символа (%), после которого идёт один или несколько флагов следующего вида:

1)                        _ — форматирование  с выравниванием по левому краю (по умолчанию — по правому);

2)                        0 — заполнение  пустого пространства нулями (лидирующими) вместо пробелов.

После этих флагов идёт необязательное указание длины поля:

1)                        # — длина поля для форматирования в символах;

2)                        * — то же самое, но значение берётся из списка аргументов.

Далее указывается точность:

1) .# — количество десятичных знаков; И наконец, символы форматирования:

1)                        c — символы  (типы Char, Int и IntegeR);

2)                        d — числа в десятичной записи (типы Char, Int и Integer);

3)                        o — числа в восьмиричной записи (типы Char, Int и Integer);

4)                        x — числа в шестнадцатиричной записи (типы Char, Int и Integer);

5)                        u — беззнаковые  числа в десятичной записи (типы Char, Int и Integer);

6)                        f — числа с плавающей точкой (типы Float и Double);

7)                        g — обычный формат чисел с плавающей точкой (типы Float и Double);

8)                        e — экспоненциальный  формат чисел с плавающей точкой  (типы  Float

и Double);

9)                        s — строки (тип String).

Несоответствие типов аргументов спецификации форматирования приводит к генерации исключения во время процесса исполнения.

Класс:  PrintfType

Описание: предоставляет возможность использования произвольного количества аргументов в функции printf. Реализация этого класса скрыта.

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

class PrintfType t where

spr  :: String ->  [UPrintf] ->  t

В качестве экземпляров этого класса возможны типы: a ->  r, где тип r также является экземпляром этого класса; а также типы IO и [].

Класс:  HPrintfType

Описание: предоставляет возможность использования произвольного количества аргументов в функции hprintf. Реализация этого класса также скрыта. Определение:

class HPrintfType t where

hspr  :: Handle ->  String ->  [UPrintf] ->  t

В качестве экземпляров этого класса возможны типы: a ->  r, где тип r также является экземпляром этого класса; а также тип IO.

Класс:  PrintfArg

Описание: определяет общий интерфейс для типов, которые  могут  выступать типами аргументов функций printf и hprintf.

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

class PrintfArg a  where toUPrintf  ::  a ->  UPrintf

Экземплярами этого класса являются следующие типы: Char, Double, Float,

Int, Integer и [].

Класс:  IsChar

Описание: предоставляет интерфейс для перекодирования значений произвольного типа в тип Char и обратно.

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

class IsChar  c  where toChar      :: c  ->  Char fromChar  ::  Char ->  c

Экземпляром этого класса является тип Char.

Остаётся отметить, что электронный адрес ответственного за этот  модуль в поставке языка Haskell следующий: lennart@augustsson.net.

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

По теме:

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