Главная » Haskell

Модуль Printf

Добавлено Дата: 12 June, 2012 категория: Haskell

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

import Text.Printf

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

Читать »

Модуль Error необходимый для проверки возвращаемых при маршализации значений и генерации исключений типа userError в случаях наличия ошибок в значениях

Добавлено Дата: 12 June, 2012 категория: Haskell

содержит функции, необходимые для проверки возвращаемых при маршализации значений и генерации исключений типа userError в случаях наличия ошибок в значениях.  Предполагается, что этот модуль подключается в проект при помощи реимпорта из модуля Marshal, однако если имеется необходимость использования этого модуля отдельно, его можно подключить следующим образом:
Читать »

Prelude: Классы и их экземпляры

Добавлено Дата: 10 June, 2012 категория: Haskell

Класс:  Bounded

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

Читать »

Модуль Eq

Добавлено Дата: 10 June, 2012 категория: Haskell

также предназначен для разгрузки стандартного модуля Prelude. В него вынесено определение класса Eq (см. стр. 117) и определения нескольких десятков экземпляров для этого класса. Использование:

import  Data.Eq

Класс Eq определяет  класс типов, в которых имеет смысл отношение сравнения. Соответственно, определены два метода: (==) (равенство значений) и (/=)  (неравенство значений). Для экземпляра можно определять либо один метод, либо другой, либо оба вместе. Все базовые типы данных являются экземплярами  этого класса. Более того, для произвольного алгебраического типа данных можно автоматически построить экземпляр этого класса, если каждый из компонентов типа является экземпляром класса Eq.

Читать »

Система модулей

Добавлено Дата: 10 June, 2012 категория: Haskell

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

Читать »

Модуль Marshal

Добавлено Дата: 10 June, 2012 категория: Haskell

Модуль, который включает в себя при помощи реимпорта функциональность пяти нижеследующих модулей, описывающих специфические функции для работы в рамках подхода FFI с объектами, над которыми можно производить маршализацию. Использование:

import Foreign.Marshal

Читать »

Модуль Tree

Добавлено Дата: 9 June, 2012 категория: Haskell

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

import  Data.Tree

Главный тип данных в этом модуле: Tree.

Тип: Tree

Читать »

Каррирование и частичное применение

Добавлено Дата: 9 June, 2012 категория: Haskell

Общий  вид  типа  функции  в  виде  (Arg1Type ->  (… ->  (ArgNType -> ResType)…))  наводит  на   мысль  о   том,   что   каждая   функция   может рассматриваться  в   качестве   функции   одного  аргумента,  при   этом   результатом  исполнения такой   функции  будет  тоже   функция.  Действительно,  если  мысленно   обозначить в  представленном выражении  типа  часть (… ->  (ArgNType ->  ResType)…) как ResType*, то типом исходной  функции будет выражение (Arg1Type ->  ResType*), а это в силу определения типа функции есть тип функции одного аргумента.

Читать »

Модуль Applicative

Добавлено Дата: 8 June, 2012 категория: Haskell

Этот модуль описывает структуру, промежуточную между монадой и функтором. Эта структура предоставляет выстраивать  чистые выражения в последовательности,  но не предоставляет  возможности связывания. Технически эта структура является строго-нестрогим моноидальным функтором — прикладным функтором. Детально о такой структуре описывается в [15]. Главный класс этого модуля очень полезен вместе с экземплярами класса  Traversable (см. раздел 8.28.).

Читать »

Рекурсия и корекурсия

Добавлено Дата: 7 June, 2012 категория: Haskell

В языке Haskell нет таких операторов, как for, while или goto. Это связано с тем, что эти операторы явно императивны, то есть они  определяют пошаговый порядок исполнения некоторых инструкций.  Как  уже  было неоднократно упомянуто, язык Haskell, как чистый функциональный язык, не имеет (и не должен иметь) подобных средств. Для организации цикла здесь используется другой механизм — рекурсия.  А такая конструкция, как безусловный переход, просто невыразима в терминах функционального программирования.

Читать »

Синонимы типов

Добавлено Дата: 7 June, 2012 категория: Haskell

используются для упрощения записей имён типов. Иногда типы некоторых выражений являются достаточно сложными. Это может происходить при использовании алгебраических типов данных, в конструкторах которых используется  большое количество типов, либо в типах функций. Для того чтобы исключить многократное повторение одинаковых длинных последовательностей, можно определять синонимы типов. Эта техника также полезна и в качестве объявления единственной программной сущности, для изменения которой в случае необходимости вносить изменения было бы можно только в одном месте программного кода.

Читать »

Для чегонужен модуль Storable

Добавлено Дата: 7 June, 2012 категория: Haskell

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

import Data.Array.Storable

Читать »

Модуль Char8

Добавлено Дата: 6 June, 2012 категория: Haskell

В модуле Char8 определены все те же  самые программные  сущности, что и в модуле ByteString. Все типы данных, все функции имеют абсолютно те же самые наименования, их  количество  такое же  (за исключением двух дополнительных функций, которые описываются ниже). Этот модуль полностью дублирует модуль ByteString, однако его предназначение несколько иное. В то время как в модуле ByteString для представления символов строки используется тип Word8, в рассматриваемом модуле  Char8 для тех же  целей используется  одноимённый тип Char8.

Читать »

Детальный разбор нескольких примеров определения функций

Добавлено Дата: 6 June, 2012 категория: Haskell

Каждое определение функции (не сигнатура) состоит из набора так называемых клозов, то есть отдельных вариантов определения функции, которые зависят от вида входных параметров, которые называются образцами и разделены

пробелами. Более детально образцы и клозы описываются чуть ниже (см. раздел 1.2.). Здесь же детально описывается несколько примеров определения различных функций, которые взяты всё из того же стандартного модуля Prelude.

Читать »

Абстракция  данных при помощи модулей

Добавлено Дата: 5 June, 2012 категория: Haskell

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

Читать »