编译带有外部依赖关系的haskell脚本,无需使用cabal

本迪克

我是Haskell的新手,我意识到我可能会在这里逆流而上,但是我会问:

假设我有一个简短的Haskell脚本:

import Data.List.Split (splitOn)

main :: IO ()
main = do
  let orders = splitOn "x" "axbxc"
  putStrLn $ head orders

如果仅使用标准函数,则可以使用进行编译ghc <script.hs>因为我依靠split软件包来提供splitOn功能,所以编译失败。

现在,我毫不费力地设置了带有project.cabalSetup.hs文件的cabal项目,以使其能够实际编译。但是,对于独立脚本来说,这感觉像是很多额外的样板。

因此,有没有办法针对某个外部软件包编译单个.hs文件?类似于Python中的操作pip install something可以通过“将程序包安装到解释器中”来完成,即是否可以将额外的程序包“安装到ghc中”,所以例如我只需要提供一些到ghc的额外链接标志?

布拉德恩

如果使用Stack,最简单的方法是编写一个“ Stack脚本”,这是一个Haskell文件,在第一行中包含对所需软件包的描述(实际上是调用stack指定适当的命令行参数)。一个示例(从docs稍作修改):

$ cat turtle-example.hs
-- stack --resolver lts-6.25 script --package turtle
{-# LANGUAGE OverloadedStrings #-}
import Turtle
main = echo "Hello World!"
$ stack ./turtle-example.hs
Completed 5 action(s).
Hello World!
$ stack ./turtle-example.hs
Hello World!

该脚本使用turtle包;运行时,Stack下载并构建此依赖项,然后在脚本中可用。(请注意,它turtle已经第二次运行了,因此不再需要重新构建。)

碰巧的是,--packageStack中命令不仅限于脚本。它也可以与其他Stack命令一起使用!例如,要编译程序,您应该可以运行stack ghc --resolver lts-16.27 --package split -- -ghc-options your-program-name.hsstack ghci --package split会在可能的地方给您GHCi提示import Data.List.Split

(注意:这个答案只针对Stack,而不是Cabal,因为我不太了解Cabal。但是,我相信所有这些都可以使用Cabal来完成。例如,我知道Cabal与我上面提到的Stack脚本,尽管我暂时不记得语法。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Cabal将Haskell依赖关系的版本固定到基础原生依赖关系的版本?

是否可以使用在编译时无法解决的外部依赖关系来编译静态库?

具有依赖关系的Elixir脚本

在库中使用外部依赖关系

使用C ++和Stack / Cabal编译Haskell软件包

我如何编译使用外部依赖项的C#库,而无需将其包含在库中?

具有外部依赖项的 Moqui 脚本

Gradle在编译任务中使用具有依赖关系的jar

如何使用带有私有存储库中的依赖关系的Go运行Google Cloud Function?

使用具有外部依赖关系的库构建多个子项目

Webpack外部依赖关系

如何使用以太来获取最新的带有时间戳的快照依赖关系?

如何在命令行中使用带有gradle的袜子来解决依赖关系?

Cabal 无法解析 Idris 的依赖关系

cabal install cabal-install无法解决依赖关系

Maven编译失败,因为没有可用的依赖关系

如何使用带有gprof的makefile重新编译依赖项?

陷入具有外部jar依赖关系的构建jar中

Aurelia从具有外部依赖关系的插件中捆绑组件

使用Roslyn进行编译时自动解决依赖关系

具有相互依赖关系运行SQL脚本

使用Cabal安装Haskell软件包而无需连接互联网

带有Jar和软件包依赖关系的Makefile

两个带有依赖关系问题的tsconfig文件

Haskell Cabal + Nix:为项目中的所有依赖项生成本地文档

我可以在Maven中同时使用Java和Scala混合代码编译具有依赖关系的Scala项目吗?

使用Webpack编译的AppDynamics(Node.js / Express)依赖关系已损坏-有人可以确认吗?

AngularJS:带有HTML和角度表达式的指令,使用外部范围“编译”内容

带有外部库的 Angular 项目不能使用 angular-cli 在 AOT 模式下编译