我是新手,但并不精通Cabal。
我已经将一个cabal项目转换为堆栈。看起来一切正常。我喜欢它,到目前为止。
但是我发现了一些我不理解的东西。执行堆栈构建命令时,我看到创建了两个输出可执行文件。两者都在.stack-work路径中,一个在dist下,另一个在安装下。它们的大小完全不同。dist路径中的文件几乎是安装路径中文件大小的两倍。
我唯一能想到的解释是dist路径中的可执行文件可能包含(嵌入在其自身中)在不同机器上运行此代码所需的所有程序包依赖项(它是完整的并准备分发到)。 (在另一台计算机上),而安装路径中的文件则希望该文件在构建该计算机以及将这些依赖库安装在主应用程序代码外部的同一计算机上运行。
那有意义吗?
还有其他解释吗?
戴夫·史密斯
我有一个Haskell程序,它读取输入文件的内容并解析它以排序和删除重复项.这个程序已经休眠了一段时间了,我需要复活它.我只是针对这个问题的一些历史背景告诉你这个.
当我重新启用该程序时,我发现它无法正常工作.我的调试已将问题隔离到解析和"清理"输入文件的代码.在此之后发生的事情对于这个问题是无关紧要的,因为我最终得到了输入文件中的空候选记录列表.
我在我的Windows笔记本电脑上编写并测试该程序,然后在需要运行的Ubuntu服务器上部署和构建源代码.作为我的调试的一部分,我已经将文本解析分解为几个下降步骤,并且在最后一步的输出上运行catMaybe的部分是我获取空列表的地方,但仅当我在Ubuntu服务器上运行它时.
以下是main中的源代码,用于演示此问题:
main = do
[ inFileName ] <- getArgs
sFile <- readFile inFileName
let lrec = lines sFile
putStrLn $ "Number of lines read from the file: " ++ show (length lrec)
let prec = map processLine lrec
putStrLn $ "Number of processed lines is " ++ show (length prec)
-- let persons = mapMaybe processLine lrec
let persons = catMaybes prec
putStrLn $ "Number of filtered person records: " ++ show (length persons)
let records = …Run Code Online (Sandbox Code Playgroud)