`cabal run`做什么?

时间:2015-08-11 06:27:50

标签: cabal

我认为cabal run与执行cabal repl并在shell中运行:main做同样的事情,但在我的项目中,他们正在做不同的事情。 cabal repl -> :main正在正确地投掷错误我试图测试,而cabal run不会抛出同样的错误。我有什么遗失的吗?

编辑:代码示例

main = do
    checkFormat [[1,2]] `seq` return () -- force eval

checkFormat :: [[Int]] -> IO ()
checkFormat matrix = all (\row -> checkRow row `seq` True) matrix `seq` return ()

checkRow :: [Int] -> IO ()
checkRow row = error "Test"

使用cabal run运行此代码完成了该计划,而cabal repl -> :main错误导致*** Exception: Test

编辑: 所以代码示例显然有效......请参阅我在http://github.com/brandonchinn178/sudoku的实际代码。如果您执行cabal run并输入........a作为第一行,则不会出现错误,但如果您将cabal repl -> :main -> ........a作为第一行,则会出错

1 个答案:

答案 0 :(得分:0)

来自@rack = Rack::Server.new( # ... environment: :none )

运行指定的类似可执行文件的组件(可执行文件,测试文件或 基准),首先确保它是最新的。

在这里运行意味着执行已编译的可执行文件。但是就像the GHC documentation says

将Haskell源模块加载到GHCi中时,通常会将其转换为字节码并使用解释器运行。

因此,无论您使用cabal run --help还是GHCi都确实有所不同。最显着的区别是性能。 GHCi通常运行速度较慢,但​​编译速度较快(因为它仅编译为可解释的代码)。

就您而言,严格性似乎有所不同。我不确定为什么会这样。也许GHC优化了程序中的常量?