我认为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
作为第一行,则会出错
答案 0 :(得分:0)
来自@rack = Rack::Server.new(
# ...
environment: :none
)
:
运行指定的类似可执行文件的组件(可执行文件,测试文件或 基准),首先确保它是最新的。
在这里运行意味着执行已编译的可执行文件。但是就像the GHC documentation says:
将Haskell源模块加载到GHCi中时,通常会将其转换为字节码并使用解释器运行。
因此,无论您使用cabal run --help
还是GHCi都确实有所不同。最显着的区别是性能。 GHCi通常运行速度较慢,但编译速度较快(因为它仅编译为可解释的代码)。
就您而言,严格性似乎有所不同。我不确定为什么会这样。也许GHC优化了程序中的常量?