Главная » Haskell

Ввод и вывод

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

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

Читать »

Модуль Bits

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

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

import Data.Bits

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

Читать »

Модуль Int

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

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

Читать »

Экземпляр  — связь между  типом и классом

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

Система типизации в языке  Haskell предоставляет  поистине  удивительную технологию, которая позволяет создавать дополнения к интерфейсам (наборам функций, оперирующих с заданным типом данных) «на лету». Эта технология основывается на понятии экземпляра класса.

Читать »

Определение нескольких экземпляров для уникальной пары (класс, тип)

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

В языке Haskell запрещено создание нескольких экземпляров некоторого класса для одного и  того же  типа данных.  Действительно, в противном случае транслятор языка не смог бы  определить, какой именно экземпляр использовать при рассмотрении прикладных функций, когда такие прикладные функции работают с экземплярами некоторых классов. В стандарте языка запрещено даже  определять разные экземпляры одного и того же  класса для типов,  являющихся общим и конкретизированным вариантом одного алгебраического типа данных (например, нельзя создать экземпляры класса Eq для типов Maybe  a и Maybe  Int, поскольку более общий тип, использующий параметрический полиморфизм, перекрывает собой конкретизированный, и в этом случае транслятор также находится в затруднении). Хотя последнее ограничение  снято в некоторых компиляторах (например, GHC), оно обычно входит в состав нестандартизированных расширений языка.

Читать »

Модуль QSem

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

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

Читать »

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

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

Функция: abs

Описание: возвращает модуль заданного числа.

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

abs :: Num  a  => a ->  a abs  x  | x  >= 0        =  x

| otherwise = -x

Функция: absReal

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

Читать »

Модуль Ix

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

В модуле Ix описан класс, который используется как интерфейс к типам данных, представляющих значения, которые  могут  использоваться в качестве  индексов (индексация сопоставляет  некоторое непрерывное множество с набором значений экземпляров описываемого класса). Например, этот класс используется для индексации массивов IArray (см. стр. 233) и MArray (см. стр. 237). Использование:

Читать »

Стандартные библиотеки

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

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

Читать »

Модуль Fixed

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

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

Читать »

Модуль Fix

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

 представляет  описание программных сущностей,  которые  описывают монадические неподвижные точки.  Детальное  описание этого понятия доступно в работе [5]. Данный модуль является «подчинённым»  по отношению к модулю Monad, поэтому его импорт выглядит следующим образом:

Читать »

Модуль IntMap

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

В модуле IntMap содержится описание такой важной идиомы в программировании, как отображения. Реализация отображений достаточно эффективна и ос-

нована на использовании специального вида деревьев (вместо обычных сбалансированных деревьев), описанных в работах [19, 16]. В этом модуле используются имена функций, которые конфликтуют со многими функциями из стандартного модуля Prelude, поэтому использование его выглядит следующим образом:

Читать »

Кратко об алгебраических типах данных

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

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

Читать »

Модуль Monad

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

Модуль  Monad содержит  дополнительные расширения  функциональности языка Haskell, которая используется для работы с монадами. Использование модуля:

import  Control.Monad

Данный модуль определяет три класса, которые описывают интерфейсы монадических типов.

Читать »

Модуль Version

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

 является общим модулем для решения вопросов генерации и представления  номеров версий программного обеспечения  (либо чего-нибудь  ещё, что может иметь версии). Использование:

import Data.Version

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

Читать »