Каков современный стандартный рабочий процесс для создания проектов на Haskell?
Поскольку все меняется так быстро, я разместил этот вопрос, так что, надеюсь, согласованный сообществом способ начать проект на Haskell можно уточнить. Представьте, что у меня есть два отдельных проекта:
Проект № 1: Площадь, библиотека, которая возводит числа в квадрат. Нет депов.
-- Square.hs module Square where square :: Num a => a -> a square x = x * x
Проект № 2: Гипотенуза, библиотека и исполняемый файл, который находит самую длинную сторону прямоугольного треугольника. Зависит от #1:
-- Hypotenuse.hs module Hypotenuse where import Square hypotenuse :: Floating a => a -> a -> a hypotenuse x y = sqrt $ square x + square y
,
-- Main.hs import System.Environment import Hypotenuse main = do [x,y] <- fmap (map read) getArgs print $ hypotenuse x y
Начиная с компьютера с установленным GHC 7.10.2, Stack и Cabal и одним каталогом, ~/OrganizeMe
, содержащий ~/OrganizeMe/Square.hs
, ~/OrganizeMe/Hypotenuse.hs
а также ~/OrganizeMe/Main.hs
Как показано выше - какой полный набор команд Unix опытный Хаскеллер использовал бы для разработки этих проектов? Это включает:
Организация дерева каталогов этих проектов;
настройка
Stack
/Cabal
/etc
(а такжеgit
, по выбору);строительство / установка их на месте;
публикации в
Hackage
/Stackage
,
1 ответ
Это не полный ответ, это не начинается с вашего OrganizeMe
каталоги (в вашем коде есть некоторые ошибки), и они не включают публикацию в Hackage/Stackage. Я начинаю с каталога stackenv
чтобы содержать оба пакета, но вы могли бы сделать это совершенно по-разному, конечно.
mkdir stackenv && cd stackenv/
mkdir square && cd square
vim Square.hs # The file you describe without the x in the type of square
cabal init # Go through the questions and choose "library"
stack init
cd ../ && mkdir hypotenuse && cd hypotenuse/
vim Hypotenuse.hs # The file you describe
vim Main.hs # The file you describe but importing Hypotenuse
cabal init # Go through the questions... "executable" this time
stack init
vim hypotenuse.cabal # add "square" or chosen package name to build-depends
vim stack.yaml # add "- '../square/'" below packages
stack install
hypotenuse 3 4 # works because ~/.local/bin is in my PATH
Надеюсь это поможет.