什么是构建Haskell项目的最新标准工作流程?

时间:2015-10-02 13:37:35

标签: haskell module cabal stackage

由于事情变化如此之快,我已经发布了这个问题,所以希望能够澄清社群同意的启动Haskell项目的方式。想象一下,我有两个独立的项目:

  • 项目#1 :Square,正方形数字的库。没有代表。

    -- 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开始上面 - 经验丰富的Haskeller用来构建这些项目的一整套unix命令是什么?包括:

  1. 组织这些项目的目录树;

  2. 配置Stack / Cabal / etc(和git,可选);

  3. 在本地构建/安装;

  4. 发布到Hackage / Stackage

1 个答案:

答案 0 :(得分:4)

这不是一个完整的答案,它不是从你的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

希望这有帮助。