Главная страница Haskell
Методические указания
При программировании рекомендуется:
- Разбить код/решение на логические модули для частей кода, которые должны минимально зависеть друг от друга
- Разбивать по возможности код модуля на простые функции (каждая с одним ясным предназначением)
- Писать всюду определённые функции (они не завершаются аварийно ни на одном возможном входе)
- Пользоваться системой контроля версий (например, Git)
- Придерживаться правил оформления исходного кода (такой код легко читать, проверять и модифицировать)
При разработке проекта рекомендуется использовать утилиту Stack.
Команды утилиты:
- stack setup - установка компилятора
- stack build - сборка проекта
- stack ghci - запуск интерпретатора GHCi с автоматической загрузкой модулей проекта
- stack run - запуск исполняемой программы
- stack test - тестирование проекта
Для установки зависимостей Stack использует Stackage - стабильный репозиторий пакетов.
Для выполнения практического задания рекомендуется использовать последний доступный LST Haskell.
Начальную версию проекта можно создать с помощью Haskell Tool Stack.
Для оформления проекта требуется добавить файл README, включающий в себя описание проекта, инструкцию по установке и запуску, описание реализованных возможностей.
Шаблон проекта представлен в репозитории https://gitlab.com/cmc-haskell-2022/project-template
Важными частями проекта являются:
- директория src/, содержащая исходный код общей, библиотечной части; здесь вы будете писать всю логику проекта, а также реализовывать индивидуальные части
- директория app/ с исходным кодом исполняемого модуля
- директория test/ c автоматическими тестами для вашего проекта
- файл stack.yaml с указанием версии компилятора и зависимостей
- файл package.yaml с описанием проекта, его зависимостей и опций компилятора
- файл README.md с базовым описанием проекта, его сборки и запуску
Остальные файлы - это дополнительные полезные настройки:
- файл .gitignore, указывающий Git не обращать внимания на временные файлы
- файл .ghci для более чистого вывода интерпретатора GHCi.
Правила оформления исходного кода
Настоятельно рекомендуется:
- Использовать CamelCase для именования функций и переменных.
- Использовать описательные названия функций, даже достаточно длинные.
Хорошо: solveRemaining
Плохо: slv
Ужасно: solveAllTheCasesWhichWeHaven'tYetProcessed
- НЕ использовать транслит (как непрофессионализм) в названиях и именах.
- НЕ использовать символы табуляции: Haskell чувствителен к отступам и табуляция может привести к ошибкам.
- Не писать строчки длиннее 80 символов (код, который не приходится пролистывать по горизонтали, читать удобнее).
- Описывать тип (сигнатуру) для каждой функции на верхнем уровне - это улучшает документацию и способствует лучшей диагностике ошибок при компиляции. Локально определенные функции и константы (в конструкциях let и where) в сигнатурах не нуждаются, но их указание также улучшает сообщения об ошибках.
- Добавлять комментарий для каждой функции на верхнем уровне.
- Использовать флаг -Wall при компиляции или же запись {-# OPTIONS_GHC -Wall #-} в самом начале файла с кодом ? этот флаг включает все предупредительные сообщения компилятора.
Рекомендации по выбору библиотек
При реализации практического задания может потребоваться использование сторонних библиотек.
Для синтаксического разбора рекомендуется использовать комбинаторные библиотеки, например, parsec или attoparsec. parsec предоставляет более выразительные средства и лучше подходит для разбора исходного кода и конфигурационных файлов, а attoparsec предлагает более простой интерфейс и меньше возможностей, но на несколько порядков лучше по производительности и подходит для разбора сетевых протоколов, логов, бинарных данных.
Для создания приложений с консольным интерфейсом рекомендуется использовать библиотеку brick
Для работы с векторной 2D графикой простой и удобный интерфейс предоставляет библиотека gloss
- Для игр рекомендуется использование модулей Graphics.Gloss.Interface.Pure.Game или Graphics.Gloss.Interface.IO.Game
- Для моделирования можно использовать модули Graphics.Gloss.Interface.Pure.Simulate или Graphics.Gloss.Interface.IO.Simulate
Для создания в приложении конфигурационных файлов пригодны многие языки разметки и библиотеки для их перевода во внутреннее представление, наиболее распространены:
- JSON (библиотека aeson)
- YAML (библиотека yaml)
- TOML (библиотека htoml)
Для работы с базой данных рекомендуется использовать библиотеку persistent, она предоставляет интерфейс, не зависящий от конкретной используемой СУБД и поддерживает как минимум PostgreSQL, SQLite, MySQL и MongoDB. Для сложных запросов (например, по нескольким таблицам) предлагается использовать библиотеку esqueleto, которая работает поверх библиотеки persistent.
Главная страница Haskell