Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/120: Рейтинг темы: голосов - 120, средняя оценка - 4.53
Модератор
 Аватар для Curry
5158 / 3496 / 536
Регистрация: 01.06.2013
Сообщений: 7,594
Записей в блоге: 9

Правильная установка Haskell. Утилита Stack

02.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

Кликните здесь для просмотра всего текста
C:\Users\User\Samples\Haskell>stack new tst1
Downloading template "new-template" to create project "tst1" in tst1\ ...

The following parameters were needed by the template but not provided: author-em
ail, author-name, category, copyright, github-username
You can provide them in C:\sr\config.yaml, like this:
templates:
params:
author-email: value
author-name: value
category: value
copyright: value
github-username: value
Or you can pass each one as parameters like this:
stack new tst1 new-template -p "author-email:value" -p "author-name:value" -p "c
ategory:value" -p "copyright:value" -p "github-username:value"

Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- tst1\tst1.cabal

Selecting the best among 10 snapshots...

Downloaded lts-8.12 build plan.
Populated index cache.
* Matches lts-8.12

Selected resolver: lts-8.12
Initialising configuration using resolver: lts-8.12
Total number of user packages considered: 1
Writing configuration to file: tst1\stack.yaml
All done.

C:\Users\User\Samples\Haskell>

В сообщении указывается, что если мы пропишем свой 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
Haskell
1
2
3
4
5
module Main where
 
main :: IO ()
main = do
   putStrLn "hello world"
- обычный "хелоуворд". Находясь в корне проекта соберём из него исполняемый файл.
Но вначале, загрузим собственно компилятор подходяший для сборки 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:
C:\Users\User\Samples\Haskell\tst2>stack exec tst2
hello world

C:\Users\User\Samples\Haskell\tst2>
Теперь воспользуемся интерпретатором.
Равноправные команды stack ghci и stack repl.
Как пользоваться интерпретатором - это уже совсем другая история.
Скажу только что выполнить уже загруженный модуль с функцией main можно по :ma,
перезагрузить программу (после редактирования внешним редактором) :r, посмотреть список команд можно по :h (для команды достаточно набрать столько букв, что бы она была отличима от других - например, для команды :reload оказывается достаточно набрать :r).
Выход из интерпретатора :q или Ctrl-D
Миниатюры
Правильная установка Haskell. Утилита Stack  
5
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2017, 03:22
Ответы с готовыми решениями:

Установил stack. Теперь нужен хороший редактор haskell или ide под linux (debian)
Что будет лучше с учётом использования только stack? Windows в прошлом для меня.

Установка haskell и wxhaskell
Здравствуйте, дайте пожалуйста инфу, как и в каком порядке устанавливать wxhaskell, юзал поиск по форуму, перекачал кучу всего, не которые...

Установка SDL и её Haskell- обёрток
Что такое SDL можно посмотреть в вики . Не скрою, что я публикую здесь описание установки SDL т.к. она требуется в сочиняемом мной GUI,...

4
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
02.05.2017, 05:51
Огромное спасибо! Снесу старую установку и поставлю Stack. А вот интересно: можно ли установить stack на машину без сети?
0
Модератор
 Аватар для Curry
5158 / 3496 / 536
Регистрация: 01.06.2013
Сообщений: 7,594
Записей в блоге: 9
02.05.2017, 16:04  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
А вот интересно: можно ли установить stack на машину без сети?
Установить временно обеспечив ей доступ к сети. Если потом не обновляться и не доустанавливать пакеты, то должен работать. Можно, в принципе, скопировать все нужные пути с работающей машины и прописать переменные окружения. Где у stack что лежит можно увидеть выполнив stack path.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
02.05.2017, 18:37
KolodeznyDiver, я имел в виду вот что. Когда я устанавливал haskell-platform, то скачивал инсталляцию и запускал ее. Дальше, если нужно обновление, можно подцепиться к сети и использовать cabal, верно? А stack можно установить, скачав и установив инсталляцию (и получив работоспособный haskell)?
0
Модератор
 Аватар для Curry
5158 / 3496 / 536
Регистрация: 01.06.2013
Сообщений: 7,594
Записей в блоге: 9
02.05.2017, 19:47  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
А stack можно установить, скачав и установив инсталляцию (и получив работоспособный haskell)?
Доступ к интернет требуется для команд stack update, stack setup, и даже stack new. Но если мы собираем проект stack build или запускаем интерпретатор stack ghci и все требуемые проекту пакеты уже установлены для указанной в проекте сборки, то stack-у докачивать нечего и доступ к интернет не происходит. Так же он не произойдёт если вы пытаетесь выполнить stack runhaskell File.hs. (аналог обычного runhaskell, т.е. выполнение файла без проекта). В этом случае, используется сборка указанная в C:\sr\global-project\stack.yaml. Если для неё уже установлены все нужные пакеты, то тоже выполняется без интернет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2017, 19:47
Помогаю со студенческими работами здесь

Установка Haskell Platform для Windows 7
Всем привет! Помогите, пожалуйста. Сегодня утром _Ivana привёл интересное решение в теме...

Установка Darcs и Cabal в Haskell Platform
Очередной глупый вопрос. Я скачал и установил Haskell platform 2011.4.0.0, и в нём, как утверждают разработчики, уже есть Cabal. Для тех,...

[bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>'
Возникает ошибка File1.cpp(19): E2316 'Stack&lt;T&gt;::Stack()' is not a member of 'Stack&lt;T&gt;' #pragma hdrstop #pragma argsused ...

Правильная Установка
Jdk установлен C:\Java\jdk1.8.0_92. Переменная Path значение- C:\Java\jdk1.8.0_92\bin. В командной строке: ...

Правильная установка
Сейчас есть старенький сервер под управлением Server 2003, роли файлового сервера, сервера удаленного доступа/впн, сервера терминалов. На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
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
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru