Cabal Vs runhaskell,何时使用?

时间:2015-04-18 13:36:40

标签: haskell cabal

在haskell构建系统中,Cabal以及runhaskell拥有几乎相同的子命令集configurebuild。对于runhaskell,它是:

runhaskell Setup.hs configure
runhaskell Setup.hs build

...而对于cabal来说:

cabal build
cabal configure

那么,我什么时候应该使用哪个命令?这两个命令是否具有相同的功能?

我是否可以在没有sudo访问权限的情况下运行runhaskell,因为我看到runhaskell/opt/ghc/7.8.4/lib内输入,而cabal在sudo / non-sudo模式下工作?

2 个答案:

答案 0 :(得分:5)

cabalrunhaskell用于完全不同的目的。         runhaskell用于执行没有的Haskell程序         需要编译它们。您可以将它放在Haskell文件的顶部:#!/usr/bin/env runhaskell并赋予它脚本编写能力。 cabal是包管理器和构建系统         对于Haskell。

同样cabalrunhaskell不要共享他们的子命令,例如      configurebuildinstall等。


  

我在这个链接中看到bob.ippoli.to/archives/2013/01/11/getting-started-with-haskell,正在使用两个命令... runhaskell Setup.hs configure&& runhaskell Setup.hs build

Setup.hs

生成时,cabal init通常会生成以下代码
import Distribution.Simple
main = defaultMain

现在,如果您看到defaultMain的实施:

defaultMain :: IO ()
defaultMain = getArgs >>= defaultMainHelper simpleUserHooks

所以你传递的实际上是命令行参数,可以是任何东西。事实上,你可以自己测试一下:

$ runhaskell Setup.hs invalid_argument
unrecognised command: invalid_argument (try --help)

答案 1 :(得分:2)

runhaskell没有任何子命令:

  

$ runhaskell --help
  用法:runghc [runghc flags] [GHC flags]模块[program args]

它需要一个Haskell源文件的路径并立即执行它。因此,当你想要的只是运行一些Haskell代码时,你应该使用它。当然,您可以在没有超级用户访问权限的情况下使用runhaskell;我怀疑它在/opt中创造了什么。

Cabal是Haskell项目的构建系统,其目的是将Haskell源代码转换为二进制文件。