мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияПоследняя версияСледующая версия справа и слева | ||
haskell [15/09/2018 15:02] – [2.6 Использование монады состояния] vlasov | haskell [02/12/2018 12:44] – [5.5 Классы типов] vlasov | ||
---|---|---|---|
Строка 25: | Строка 25: | ||
- [[http:// | - [[http:// | ||
- [[http:// | - [[http:// | ||
- | - [[http://dev.by/blogs/ | + | - [[https://events.dev.by/lenta/ |
- [[http:// | - [[http:// | ||
- [[https:// | - [[https:// | ||
Строка 383: | Строка 383: | ||
</ | </ | ||
- | Вот версия более простого и понятного примера: | + | < |
+ | Как показали дальнейшие изыскания, | ||
+ | [[https:// | ||
+ | < | ||
+ | Prelude> :set -XMonomorphismRestriction | ||
+ | Prelude> let x = 2 | ||
+ | Prelude> x + 2.0 | ||
+ | |||
+ | < | ||
+ | * No instance for (Fractional Integer) | ||
+ | arising from the literal `2.0' | ||
+ | ... | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Вот версия более простого и понятного примера, без странностей ограничения мономорфизма: | ||
<code haskell> | <code haskell> | ||
Строка 394: | Строка 410: | ||
In an equation for `it': it = x + y | In an equation for `it': it = x + y | ||
</ | </ | ||
- | В языках типа Си это соответствовало бы объявлению и инициализации переменных типа | + | В языках типа Си это соответствовало бы объявлению и инициализации переменных типа |
==== 2.6 Использование монады состояния==== | ==== 2.6 Использование монады состояния==== | ||
Строка 438: | Строка 454: | ||
(везде ниже '' | (везде ниже '' | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
* '' | * '' | ||
- | * '' | + | * '' |
==== 3.2 Добавление к списку === | ==== 3.2 Добавление к списку === | ||
Строка 599: | Строка 615: | ||
* '' | * '' | ||
* '' | * '' | ||
- | * ''< | + | * ''< |
* '' | * '' | ||
* '' | * '' | ||
Строка 704: | Строка 720: | ||
</ | </ | ||
+ | |||
+ | Более детально об импорте модулей можно прочитать тут: [[https:// | ||
==== 4.2 Экспорт модулей ==== | ==== 4.2 Экспорт модулей ==== | ||
Строка 1051: | Строка 1069: | ||
(<>) :: MyAlg -> MyAlg -> MyAlg | (<>) :: MyAlg -> MyAlg -> MyAlg | ||
O <> x = x | O <> x = x | ||
- | n <>x = next (prev n <> x) | + | n <> x = next (prev n <> x) |
(><) :: MyAlg -> MyAlg -> MyAlg | (><) :: MyAlg -> MyAlg -> MyAlg | ||
Строка 1161: | Строка 1179: | ||
- | **Задание.** Создать собственный класс Logic с операциями &&&, | + | **Задание.** Создать собственный класс Logic с операциями |
Формально класс описывается следующим образом: | Формально класс описывается следующим образом: | ||
Строка 1182: | Строка 1200: | ||
<code haskell> | <code haskell> | ||
- | infixl 7 (&&& | + | infixl 7 &&& |
- | infixl 5 (|||) | + | infixl 5 ||| |
</ | </ | ||
Строка 1258: | Строка 1276: | ||
</ | </ | ||
- | Этот код уже не слишком тривиален (что видно по обилию " | + | Этот код уже не слишком тривиален (что видно по обилию " |
Заметим, | Заметим, | ||
Строка 1278: | Строка 1296: | ||
</ | </ | ||
- | Для многострочных программ нам необходимо использовать ключевой слово < | + | Для многострочных программ нам необходимо использовать ключевое слово < |
Вот как осуществляется получение аргументов командной строки в самом простом случае: | Вот как осуществляется получение аргументов командной строки в самом простом случае: | ||
Строка 1318: | Строка 1336: | ||
==== Урок 6.2 Взаимодействие с STDIN-STDOUT ==== | ==== Урок 6.2 Взаимодействие с STDIN-STDOUT ==== | ||
- | Список базовых функций ввода-вывода может быть найден тут: [[http://www.haskell.org/ | + | Список базовых функций ввода-вывода может быть найден тут: [[https://downloads.haskell.org/ |
или на русском языке тут: | или на русском языке тут: | ||
[[http:// | [[http:// | ||
Строка 1529: | Строка 1547: | ||
writeFile " | writeFile " | ||
</ | </ | ||
- | Здесь " | + | Здесь " |
Работа с " | Работа с " | ||
Строка 1536: | Строка 1554: | ||
==== 6.6 Запуск и компиляция ==== | ==== 6.6 Запуск и компиляция ==== | ||
- | Запуск подготовленных указанным выше способом возможен разными путями. | + | Запуск подготовленных указанным выше способом |
Во-первых, | Во-первых, | ||
Строка 1576: | Строка 1594: | ||
<code haskell> | <code haskell> | ||
- | data Maybe a = Nothing | Just a | + | data Maybe a = Nothing | Just a deriving (Eq, Ord) |
</ | </ | ||
(Напомним, | (Напомним, | ||
Строка 1586: | Строка 1604: | ||
</ | </ | ||
- | Полиморфные типы похожи на контейнеры, | + | Полиморфные типы похожи на контейнеры, |
Теперь, | Теперь, |