|
Модератор
|
||||||||
Правильная установка Haskell. Утилита Stack02.05.2017, 03:22. Показов 24044. Ответов 4
Метки нет (Все метки)
На настоящий момент установка и использование Haskell через утилиту stack является безусловно предпочтительным.
Некоторые могут возразить "да мне нужно то только несколько примеров решить, это, говорят, можно чём угодно". Вот именно что говорят. А на практике у вопрошающего что то не идёт. А большинство тех кто ему может ответить используют stack. Ну и вот. Денис Шевченко в свой книжке описывал установку и начало использования стека под MacOS. Я взял чистую Win 7 x32 (что было) и поставил stack. Историю этого действия с комментариями я и предлагаю почтеннейшей публики. Заходим на https://haskell-lang.org/get-started Там щёлкаем на иконке Windows, выбираем разрядность, скачиваем и запускаем. После запуска инсталятора он предложил установится в C:\Users\User\AppData\Roaming\local\bin Соглашаемся. Каталог в дальнейшем будет полезен. Далее соглашаемся добавить каталог в PATH и ещё одну переменную окружения. По завершении инсталляции вызываем консольное окно (окно командной строки), набираем в ней stack и нажимаем Enter. По длинному сообщению можно понять что stack установлен. Обновим сведения о пакетах, что бы stack ставил нам самые свежие. stack update - и придётся подождать. Далее нужно выбрать каталог для своих экспериментов (а может и работы) на Haskell. Я создал каталог c:\Users\User\Samples\Haskell Но вы можете создать любой другой. Т.к. программы stack, компилятор и т.д. изначально линуксовые я воздерживаюсь от каталогов с именами содержащими пробелы и русские буквы. И так, перейдя в c:\Users\User\Samples\Haskell я собираюсь создать проект. Сразу же предвижу вопрос "А без проекта нельзя?", мне бы маленький файлик запустить. Вообще то можно, но с проектом удобнее. В том числе с маленьким файликом. Для проекта можно выбрать шаблон (шаблоны уже загружены по команде stack update и могут обновляться, так же как списки версий пакетов). Интересно посмотреть список шаблонов: stack templates Из кратких комментариев к ним можно понять, что, по крайней мере для начала, большинство нам не понадобится. Многие шаблоны проектов предназначены для использования с конкретными пакетами или рассчитаны весьма на любителя. Однако, на этот список полезно иногда посматривать. Для создания проекта можно просто опустить имя шаблона: stack new имя-проекта Каталог проекта окажется расположен в текущем подкаталоге. Например, выполняем stack new tst1 Кликните здесь для просмотра всего текста
В сообщении указывается, что если мы пропишем свой email, реальное имя и даже наше имя на github-е в файл C:\sr\config.yaml, то в дальнейшем они будут копироваться во вновь создаваемые проекты и даже могут как то использоваться (например, при автогенерации документации или загрзки проекта на github. lts-8.12 - означает самую свежую версию пакетов на https://www.stackage.org/ . С этим сайтом обязательно стоит познакомится. Там имеется документация к отобранным, (иногда) проверенным пакетам. Именно эти пакеты, по умолчанию загружает stack. И так, посмотрим в каталог tst1. В нём окажутся подкаталоги app - с файлом Main.hs - основным файлом программы и ещё каталоги src для создания своей библиотеки, и каталог test - для написания тестов к библиотеке. Если вас такой проект устраивает - ок. Если хочется, для начала чего поменьше, с одним исходным файлом, то вернёмся в каталог C:\Users\User\Samples\Haskell и выполним создание проекта с самым простым шаблоном: stack new tst2 simple Вот теперь действительно, создался один исходный файл в каталоге src. В корне пректа находятся файлы LICENSE README.md - эти два файла нужны для документации. Файл лицензии и ридми. Подразумевается, что, если мы захотим это куда то выложить, то мы там напишем много всякого. Компилятору они не интересны, stack-у, пока, тоже. Setup.hs - файл инсталяции нашего пакета, если мы его захотим инсталлировать. Они одинаковые почти для всех проектов, небольшие и просто не обращайте на него внимания. tst2.cabal - файл описывающий проект. Он был главным в эпоху до stack-а. Сейчас он тоже нужен. Эта версия шаблона проекта подразумевает исключительно ручное редактирование этого файла. Туда можно дописать требуемые пакеты (и stack их загрузит), флаги компиляции и прочие настройки. stack.yaml - этот файл появился вместе со stack-ом. В принципе, там почти одни комментарии, в том числе и ссылка где читать описание его формата. На первых порах стоит обратить внимание только на строчку resolver: lts-8.12 Она показывает, какой сборкой пакетов мы будем пользоваться. В системе может быть установленно много сборок. Если появится новая сборка (это можно будет узнать и на https://www.stackage.org/ и при выполнении stack update) мы можем заменить эту строчку. Теперь важное. stack использует разные настройки в зависимости от того, в каталоге проекта ли он запускается (там где файлы .cabal и .yaml) или нет. В каталогах проекта он учитывает к каким сборкам относятся проекты, и при запуске утилит, в том числе интерпретатора ghci и компилятора ghc, соответственно настраивает переменные окружения. И так, посмотрим содержимое файла src\main.hs
Но вначале, загрузим собственно компилятор подходяший для сборки lts-8.12. stack setup Это не нужно делать каждый раз, для каждого проекта. То что уже загруженно stack-ом используется сообща всеми проектами. После успешной загрузки компилятора (а с ним ставятся и всякие msys-ы), после инсталляции msys2 понадобится перезапустить консольное окно что бы прописанные переменные окружения вступили в силу. Соберём, наконец, и наш "хеллоуворд" (Из каталога проекта!). stack build Как сообщает компилятор, исполняемый файл оказывается запрятан глубоко в подкаталоге .stack-work\dist\5f9bc736\build\tst2\tst2.exe При чём, подкаталог .stack-work - это всякие результаты компиляции. Если что то пойдёт не так или захочется сменить сборку lts-8.12 на другую, каталог .stack-work можно смело удалить. Так же его не стоит архивировать и подобное. Можно, конечно, запустить программу по указанному пути, но проще, опять же через stack:
Равноправные команды stack ghci и stack repl. Как пользоваться интерпретатором - это уже совсем другая история. Скажу только что выполнить уже загруженный модуль с функцией main можно по :ma, перезагрузить программу (после редактирования внешним редактором) :r, посмотреть список команд можно по :h (для команды достаточно набрать столько букв, что бы она была отличима от других - например, для команды :reload оказывается достаточно набрать :r). Выход из интерпретатора :q или Ctrl-D
5
|
||||||||
| 02.05.2017, 03:22 | |
|
Ответы с готовыми решениями:
4
Установил stack. Теперь нужен хороший редактор haskell или ide под linux (debian) Установка haskell и wxhaskell Установка SDL и её Haskell- обёрток |
|
Модератор
|
||
| 02.05.2017, 16:04 [ТС] | ||
|
1
|
||
|
Супер-модератор
|
|
| 02.05.2017, 18:37 | |
|
KolodeznyDiver, я имел в виду вот что. Когда я устанавливал haskell-platform, то скачивал инсталляцию и запускал ее. Дальше, если нужно обновление, можно подцепиться к сети и использовать cabal, верно? А stack можно установить, скачав и установив инсталляцию (и получив работоспособный haskell)?
0
|
|
|
Модератор
|
||
| 02.05.2017, 19:47 [ТС] | ||
|
1
|
||
| 02.05.2017, 19:47 | |
|
Помогаю со студенческими работами здесь
5
Установка Darcs и Cabal в Haskell Platform [bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>'
Правильная установка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|