52700.fb2
Prelude> True ‘and‘ False
False
it :: Bool
Обратите внимание на строчку let and a b = a && b. В ней мы определили синоним в интерпретаторе.
Сначала мы пишем ключевое слово let затем обычное определение синонима, как в программе. Это простое
однострочное определение, но мы можем набирать в интерпретаторе и более сложные. Мы можем написать
несколько строчек в одной, разделив их точкой с запятой:
Prelude> let not2 True = False; not2 False = True
Мы можем записать это определение более наглядно, совсем как в редакторе, если воспользуемся много-
строчным вводом. Для этого просто наберите команду :{. Для выхода воспользуйтесь командой :}. Отметим,
что точкой с запятой можно пользоваться и в обычном коде. Например в том случае если у нас много кратких
определений и мы хотим записать их покомпактней, мы можем сделать это так:
a1 = 1;
a2 = 2;
a3 = 3
a4 = 4;
a5 = 5;
a6 = 6
28 | Глава 2: Первая программа
2.4 Класс Show. Строки и символы
Мы набираем в интерпретаторе какое-нибудь сложное выражение, или составной синоним, интерпрета-
тор проводит редукцию и выводит ответ на экран. Откуда интерпретатор знает как отображать значения
типа Bool? Внутри интерпретатора вызывается метод класса Show, который переводит значение в строку. И
затем мы видим на экране ответ.
Для типа Bool экземпляр класса Show уже определён, поэтому интерпретатор знает как его отображать.
Обратите внимание на эту особенность языка, вид значения определяется пользователем, в экземпляре
класса Show. Из соображений наглядности вид значения может сильно отличаться от его внутреннего пред-
ставления.
В этом разделе мы рассмотрим несколько примеров с классом Show, но перед этим мы поговорим о стро-
ках и символах в языке Haskell.
Строки и символы
Посмотрим в интерпретаторе на определение строк (тип String), для этого мы воспользуемся командой
:i (сокращение от :info):
Prelude> :i String
type String = [Char]
-- Defined in ‘GHC.Base’
Интерпретатор показал определение типа и в комментариях указал в каком модуле тип определён. В
этом определении мы видим новое ключевое слово type. До этого для определения типов нам встречалось
лишь слово data. Ключевое слово type определяет синоним типа. При этом мы не вводим новый тип, мы
лишь определяем для него псевдоним. String является синонимом для списка значений типа Char. Тип
Char представляет символы. Итак строка – это список символов. В Haskell символы пишутся в ординарных
кавычках, а строки в двойных:
Prelude> [’H’,’e’,’l’,’l’,’o’]
”Hello”
it :: [Char]
Prelude> ”Hello”
”Hello”
it :: [Char]
Prelude> ’+’