一旦安装了Stack,就可以使用它为您安装GHC . 大!
...现在如何用它编译文件?
要明确:你应该做的是编写一个包规范并使用Stack构建 . 但肯定有一种方法可以在该项目中轻松编译一个小帮助文件?构建一个完整的项目似乎很愚蠢,因此我可以构建一个小的帮助程序,并且可以从shell中轻松运行 .
我知道我可以使用Stack运行任何Haskell文件 . 但我不能为我的生活弄清楚如何编译的东西......
您可以使用 stack ghc -- <file names> 来编译和链接一组文件(在Stack's user guide中简要提到):
stack ghc -- <file names>
您有时希望只编译(或运行)单个Haskell源文件,而不是为其创建整个Cabal包 . 你可以使用stack exec ghc或stack exec runghc . 作为简单的帮助器,我们还为这些常见情况提供了堆栈ghc和stack runghc命令 .
-- 是为了确保我们传递的参数被发送到 ghc ,而不是被解析为 stack exec 的参数 . 它是's the same thing as when trying to pass arguments to an executable you'使用普通堆栈工具链: stack exec myExe -foo 将 -foo 传递给 exec ,而不是 myExe , stack exec myExe -- -foo 按需要运行 .
--
ghc
stack exec
stack exec myExe -foo
-foo
exec
myExe
stack exec myExe -- -foo
例如:
Bar.hs
module Bar where bar :: Int bar = 5
Foo.hs
import Bar main :: IO () main = print bar
编译(甚至不需要在构建文件中指定 Bar.hs ,它是自动获取的):
> stack ghc -- Foo.hs [1 of 2] Compiling Bar ( Bar.hs, Bar.o ) [2 of 2] Compiling Main ( Foo.hs, Foo.o ) Linking Foo ... > ./Foo 5
依赖项也没有问题 - 看起来本地安装的所有软件包都可用于构建(您可以使用 containers 或 QuickCheck 而无需任何其他构建参数) .
containers
QuickCheck
1 回答
您可以使用
stack ghc -- <file names>
来编译和链接一组文件(在Stack's user guide中简要提到):--
是为了确保我们传递的参数被发送到ghc
,而不是被解析为stack exec
的参数 . 它是's the same thing as when trying to pass arguments to an executable you'使用普通堆栈工具链:stack exec myExe -foo
将-foo
传递给exec
,而不是myExe
,stack exec myExe -- -foo
按需要运行 .例如:
Bar.hs
Foo.hs
编译(甚至不需要在构建文件中指定
Bar.hs
,它是自动获取的):依赖项也没有问题 - 看起来本地安装的所有软件包都可用于构建(您可以使用
containers
或QuickCheck
而无需任何其他构建参数) .