Cabal VS runhaskell,什么时候用?

Cabal Vs runhaskell, when to use?

在haskell构建系统中,Cabalrunhaskell有几乎相同的子命令集,configurebuild。对于运行haskell,是:

runhaskell Setup.hs configure
runhaskell Setup.hs build

...而对于 cabal 来说是:

cabal build
cabal configure

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

我可以 运行 runhaskell 没有 sudo 访问权限吗,因为我看到 runhaskell/opt/ghc/7.8.4/lib 中创建条目,而 cabal 在 sudo/non-sudo 模式下工作?

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

另外 cabalrunhaskell 不共享它们的子命令,例如 configurebuildinstall


i saw in this link bob.ippoli.to/archives/2013/01/11/getting-started-with-haskell, two commands being used... runhaskell Setup.hs configure && runhaskell Setup.hs build

通常 Setup.hscabal init 生成时具有以下代码:

import Distribution.Simple
main = defaultMain

现在如果你看到defaultMain的实现:

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

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

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

runhaskell 没有任何子命令:

$ runhaskell --help
Usage: runghc [runghc flags] [GHC flags] module [program args]

它获取 Haskell 源文件的路径并立即执行。因此,当您想要 运行 一些 Haskell 代码时,您应该使用它。当然,您可以在没有超级用户访问权限的情况下使用 runhaskell;我怀疑它会在 /opt.

中创建任何内容

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