Mai*_*tor 10 haskell module cabal stackage
由于事情变化如此之快,我发布了这个问题,所以希望能够澄清社区同意的启动Haskell项目的方法.想象一下,我有两个独立的项目:
项目#1:Square,正方形数字的库.没有deps.
-- Square.hs
module Square where
square :: Num a => a -> a
square x = x * x
Run Code Online (Sandbox Code Playgroud)项目#2:斜边,库和可执行文件,找到直角三角形的最长边.取决于#1:
-- Hypotenuse.hs
module Hypotenuse where
import Square
hypotenuse :: Floating a => a -> a -> a
hypotenuse x y = sqrt $ square x + square y
Run Code Online (Sandbox Code Playgroud)
,
-- Main.hs
import System.Environment
import Hypotenuse
main = do
[x,y] <- fmap (map read) getArgs
print $ hypotenuse x y
Run Code Online (Sandbox Code Playgroud)与GHC 7.10.2计算机开始,栈和卡瓦尔安装,和一个单独的目录,~/OrganizeMe
含~/OrganizeMe/Square.hs
,~/OrganizeMe/Hypotenuse.hs
和~/OrganizeMe/Main.hs
,如上面介绍- 什么是一套完整的UNIX命令的有经验的Haskeller会用建筑师的项目?那包括:
组织这些项目的目录树;
配置Stack
/ Cabal
/ etc
(和git
,可选);
在本地建造/安装;
发布到Hackage
/ Stackage
.
这不是一个完整的答案,它不是从您的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
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。