Главная » Haskell

Модуль Pool

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

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

Читать »

Модуль ST предназначенных для работы со строгими преобразователями монады State

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

 содержит описания программных сущностей,  предназначенных для работы со строгими преобразователями монады State.  Теоретическое обоснование этого процесса приведено в работе [13]. Использование модуля:

import  Control.Monad.ST

В данном модуле описано два алгебраических типа данных, которые необходимы для работы с преобразователями монады State. Оба этих алгебраических типа данных реализованы в виде примитивов, поэтому их определения недоступны в исходных кодах модулей.

Читать »

Модуль Directory

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

В модуле Directory определены системонезависимые функции для  работы с каталогами файловой системы. Использование модуля:

import System.Directory

Каждый  идентификатор каталога  содержит набор элементов,  являющихся поименованными указателями на некоторый объект в  файловой системе (файлы, каталоги и т. д.). Некоторые такие объекты могут быть скрыты, недоступны или иметь определённые  административные функции (например, объекты «.» или «..»). Однако в данном модуле все элементы идентификатора  каталога рассматриваются в качестве  содержимого каталога,  за исключением  содержимого подкаталогов текущего каталога.

Читать »

Классы типов и экземпляры классов

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

Третий тип программных сущностей языка Haskell —  классы  типов.  Здесь имеется одна ловушка, в которую могут попасть те, кто применяет на практике объектно-ориентированный стиль. В языке Haskell, а также в некоторых схожих с ним функциональных языках программирования под термином «класс» понимается совсем не то, что подразумевает объектно-ориентированное программирование. Если в рамках объектно-ориентированного подхода под классом понимается тип данных, то в функциональном программировании (а вернее, в модели статической типизации, принятой в языке  Haskell) класс типов  —  это, скорее, интерфейс работы с данными.

Читать »

Модуль Foldable

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

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

Другими словами, в этом модуле определяется класс для представления типов, на которые можно обобщить функции foldl (см. стр. 253) и foldr (см. стр. 254). В теории категорий такой интерфейс называется катаморфизмом. Использование:

Читать »

Пакет модулей Foreign

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

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

Что интересно, в поставке стандартных модулей имеется модуль Foreign, который необходимо использовать следующим образом:

Читать »

Модуль Word

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

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

Читать »

Сводная информация

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

Таким образом, перечисленные и описанные в предыдущих главах программные сущности являются тем, что предоставляет язык Haskell для работы на поприще создания программного  обеспечения. Действительно, в языке Haskell всего пять видов программных сущностей:

Читать »

Окончательные  замечания  о  системе  типов в языке Haskell

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

Таким  образом, после изучения типов, классов и их  экземпляров, должно быть ясно, что эти три программные  сущности  являются в системе типизации

3.6. Окончательные замечания о системе типов в языке Haskell                        89

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

Читать »

Функции  высшего порядка

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

Многие примеры, рассмотренные выше, имеют одну интересную особенность. В функциях в качестве  формальных параметров  ожидаются другие функции. На это указывают и типы таких  функций, и сам их смысл. И действительно, в языке Haskell сплошь и рядом функции могут передаваться в качестве входных параметров в другие функции. Это — достаточно  естественный процесс, и связан

Читать »

Модуль Dynamic

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

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

import  Data.Dynamic

Тип: Dynamic

Читать »

Приёмы программирования

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

Язык  Haskell, как и любой иной высокоразвитый язык  программирования,  имеет уже устоявшиеся приёмы, которые позволяют писать программное обеспечение более быстро и эффективно. Такие приёмы часто называются «идиомами». Конечно, все они обычно постигаются на практике путём долгого самостоятельного обучения на своём опыте или опыте коллег. А потому этот раздел поможет читателю не тратить времени на самостоятельный поиск и постижение того, что уже давным-давно сделано.

Читать »

Модуль Graph

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

В модуле Graph определены функции для алгоритмов работы с графами, которые описаны в работе [11]. Использование модуля:

import  Data.Graph

Во внешнем интерфейсе этого модуля имеется несколько программных сущностей. Это алгебраический тип данных и пара функций для манипуляции им. Тип: SCC

Читать »

Prelude: Функции – ЧАСТЬ 2

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

id  ::  a  ->  a id  x  =  x

Функция: init

Описание: возвращает список без последнего аргумента. Исходный список должен содержать, по крайней мере, один элемент. На пустом списке функция генерирует сообщение об ошибке.

Читать »

Бинарные операции

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

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

Читать »