Haskell Language
стек
Поиск…
Установка стека
Mac OS X
Использование Homebrew :
brew install haskell-stack
Создание простого проекта
Чтобы создать проект под названием helloworld run:
stack new helloworld simple
Это создаст каталог helloworld
с файлами, необходимыми для проекта Stack.
Состав
Файловая структура
Простой проект содержит следующие файлы:
➜ helloworld ls
LICENSE Setup.hs helloworld.cabal src stack.yaml
В папке src
есть файл с именем Main.hs
Это «отправная точка» проекта helloworld
. По умолчанию Main.hs
содержит простой «Hello, World!». программа.
Main.hs
module Main where
main :: IO ()
main = do
putStrLn "hello world"
Запуск программы
Убедитесь, что вы находитесь в каталоге helloworld
и запускаете:
stack build # Compile the program
stack exec helloworld # Run the program
# prints "hello world"
Пакеты Stackage и изменение версии LTS (resolver)
Stackage - это хранилище пакетов Haskell. Мы можем добавить эти пакеты в проект стека.
Добавление объектива в проект.
В проекте стека есть файл с именем stack.yaml
. В stack.yaml
есть сегмент, который выглядит так:
resolver: lts-6.8
Stackage хранит список пакетов для каждой ревизии lts
. В нашем случае нам нужен список пакетов для lts-6.8
Чтобы найти эти пакеты, посетите:
https://www.stackage.org/lts-6.8 # if a different version is used, change 6.8 to the correct resolver number.
Просматривая пакеты, есть объектив-4.13 .
Теперь мы можем добавить языковой пакет, изменив раздел helloworld.cabal
:
build-depends: base >= 4.7 && < 5
чтобы:
build-depends: base >= 4.7 && 5,
lens == 4.13
Очевидно, что если мы хотим изменить новый LTS (после его выхода), мы просто изменим номер резольвера, например:
resolver: lts-6.9
При следующей структуре stack build
Stack будет использовать версию LTS 6.9 и, следовательно, загружать некоторые новые зависимости.
Создание и запуск проекта стека
В этом примере имя нашего проекта - «helloworld», который был создан с помощью stack new helloworld simple
Сначала мы должны построить проект со stack build
а затем мы можем запустить его с помощью
stack exec helloworld-exe
Установка стека
Запустив команду
stack install
Стек скопирует исполняемый файл в папку
/Users/<yourusername>/.local/bin/
Профилирование стеком
Настройте профилирование для проекта через stack
. Сначала создайте проект с помощью флага --profile
:
stack build --profile
Флаги GHC не требуются в файле cabal для работы (например, -prof
). stack
автоматически включит профилирование как для библиотеки, так и для исполняемых файлов в проекте. В следующий раз, когда исполняемый файл запускается в проекте, можно использовать обычные +RTS
флаги:
stack exec -- my-bin +RTS -p
Просмотр зависимостей
Чтобы узнать, от каких пакетов зависит ваш проект, вы можете просто использовать эту команду:
stack list-dependencies
Таким образом, вы можете узнать, какую версию ваших зависимостей вы фактически вытащили из стека.
Проекты Haskell часто оказываются во многих библиотеках косвенно, и иногда эти внешние зависимости вызывают проблемы, которые необходимо отслеживать. Если вы обнаружите, что вы хотите идентифицировать внешнюю зависимость изгоев, вы можете выполнить grep через весь график зависимостей и определить, какая из ваших зависимостей в конечном итоге вытягивает нежелательный пакет:
stack dot --external | grep template-haskell
stack dot
выводит граф зависимостей в текстовой форме, которую можно искать. Его также можно посмотреть:
stack dot --external | dot -Tpng -o my-project.png
Вы также можете установить глубину графика зависимостей, если хотите:
stack dot --external --depth 3 | dot -Tpng -o my-project.png