Учебник по Haskell | страница 34
В коде программы обычно пишут так:
x = if a > 3
then ”Hello”
else (if a < 0
then ”Hello”
else ”Bye”)
Отступы обязательны.
Давайте загрузим в интерпретатор модуль Prelude и наберём те же выражения стандартными функция-
ми:
*Logic> :m Prelude
Prelude> not (True && False)
True
it :: Bool
Prelude> (True && True) || (False || False)
True
it :: Bool
Prelude> not True /= False
False
it :: Bool
Prelude> if (True || False) then True else False
True
it :: Bool
Бинарные операции с символьными именами пишутся в инфиксной форме, то есть между аргументами
как в a && b или a + b. Значение с буквенным именем также можно писать в инфиксной форме, для этого
оно заключается в апострофы, например a ‘and‘ b или a ‘plus‘ b. Апострофы обычно находятся на одной
кнопке с буквой “ё”. Также символьные функции можно применять в префиксной форме, заключив их в
скобки, например (&& ) a b и (+) a b. Попробуем в интерпретаторе:
Prelude> True && False
False
it :: Integer
Prelude> (&& ) True False
False
it :: Bool
Prelude> let and a b = a && b
and :: Bool -> Bool -> Bool
Prelude> and True False
False
it :: Bool
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 уже определён, поэтому интерпретатор знает как его отображать.