Unknown - haskell-notes

Здесь есть возможность читать онлайн «Unknown - haskell-notes» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Старинная литература, на английском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

haskell-notes: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «haskell-notes»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

haskell-notes — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «haskell-notes», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

попадают лишь три первых буквы:

instance Show Week where

show Monday

=”Mon”

show Tuesday

=”Tue”

show Wednesday

=”Wed”

show Thursday

=”Thu”

show Friday

=”Fri”

show Saturday

=”Sat”

show Sunday

=”Sun”

Отступы перед show обязательны, но выравнивание по знаку равно не обязательно, мне просто нравится

так писать. По отступам компилятор понимает, что все определения относятся к определению instance.

Теперь запишем экземпляр в модуль, сохраним, и перезагрузим в интерпретатор:

*Calendar> :r

[1 of1] Compiling Calendar

( Calendar.hs, interpreted )

Ok, modules loaded : Calendar.

*Calendar> Monday

Mon

it :: Week

*Calendar> Sunday

Sun

it :: Week

Теперь наши дни отображаются. Я выпишу ещё один пример экземпляра для Time, а остальные достанутся

вам в качестве упражнения.

30 | Глава 2: Первая программа

instance Show Time where

show ( Timeh m s) =show h ++”:” ++show m ++”:” ++show s

instance Show Hour where

show ( Hourh) =addZero (show h)

instance Show Minute where

show ( Minutem) =addZero (show m)

instance Show Second where

show ( Seconds) =addZero (show s)

addZero :: String -> String

addZero (a :[]) =’0’ :a : []

addZero as

=as

Функцией addZero мы добавляем ноль в начало строки, в том случае, если число однозначное, также в

этом определении мы воспользовались тем, что для типа целых чисел Intэкземпляр Showуже определён.

Проверим в интерпретаторе:

*Calendar> Time( Hour13) ( Minute25) ( Second2)

13 :25 :02

it :: Time

2.5 Автоматический вывод экземпляров классов типов

Для некоторых стандартных классов экземпляры классов типов могут быть выведены автоматически.

Это делается с помощью директивы deriving. Она пишется сразу после объявления типа. Например так мы

можем определить тип и экземпляры для классов Showи Eq:

data T = A | B | C

deriving( Show, Eq)

Отступ за derivingобязателен, после ключевого слова в скобках указываются классы, которые мы хотим

вывести.

2.6 Арифметика

В этом разделе мы обсудим основные арифметические операции. В Haskell много стандартных классов,

которые группируют различные типы операций, есть класс для сравнения на равенство, отдельный класс для

сравнения на больше/меньше, класс для умножения, класс для деления, класс для упорядоченных чисел, и

много других. Зачем такое изобилие классов?

Каждый из классов отвечает независимой группе операций. Есть много объектов, которые можно только

складывать, но нельзя умножать или делить. Есть объекты, для которых сравнение на равенство имеет смысл,

а сравнение на больше/меньше – нет.

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

тора, которых тем не менее достаточно для описания множества натуральных чисел:

module Nat where

data Nat = Zero | Succ Nat

deriving( Show, Eq, Ord)

Конструктор Zeroуказывает на число ноль, а ( Succn) на число следующее за данным числом n. В

последней строчке мы видим новый класс Ord, этот класс содержит операции сравнения на больше/меньше:

Prelude> :i Ord

class( Eqa) => Orda where

compare ::a ->a -> Ordering

( <) ::a ->a -> Bool

( >=) ::a ->a -> Bool

( >) ::a ->a -> Bool

( <=) ::a ->a -> Bool

max ::a ->a ->a

min ::a ->a ->a

Автоматический вывод экземпляров классов типов | 31

Тип Orderingкодирует результаты сравнения:

Prelude> :i Ordering

data Ordering = LT | EQ | GT

-- Defined in GHC.Ordering

Он содержит конструкторы, соответствующие таким понятиям как меньше, равно и больше.

Класс Eq. Сравнение на равенство

Вспомним определение класса Eq:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «haskell-notes»

Представляем Вашему вниманию похожие книги на «haskell-notes» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «haskell-notes»

Обсуждение, отзывы о книге «haskell-notes» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x