Каков современный стандартный рабочий процесс для создания проектов на 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 опытный Хаскеллер использовал бы для разработки этих проектов? Это включает:

  1. Организация дерева каталогов этих проектов;

  2. настройка Stack / Cabal / etc (а также git, по выбору);

  3. строительство / установка их на месте;

  4. публикации в 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

Надеюсь это поможет.

Другие вопросы по тегам