使用Stack构建模块是否使其在全球范围内可用?

学生约会

我已经开始使用Haskell Stack,但对其了解不多。

我正在同时处理两个项目,它们都是GIT / Cabal / Stack设置。
假设migche
现在的问题是这些项目之一依赖于另一个。
我不确定是否可以仅migstack.yamlof中添加che,即使使用stack buildGHCi(stack ghci)不允许添加,也会import Mig.Example引发错误。

这甚至是一个有效的问题吗?我该怎么办?能行吗?

卡尔·布尔

关于多程序包项目的堆栈文档部分对此有一些了解,但不幸的是选择显示一个使用两个现成的程序包的示例,这使事情变得混乱。

通常的想法是将您的目录migche项目目录放在公共项目目录下,然后将一个stack.yaml文件放在列出migche作为要构建的软件包的公共目录中(而不是通常的“。”软件包)。然后将自动解决che.cabalon中的依赖项mig

这是一个完整的最小示例。如果你运行stack buildmulti,它会建立che,然后migstack exec mig运行程序。

此外,请注意,如果你把现有的两个协议栈项目目录的地方,我相信你应该删除他们的本地stack.yaml文件,并且可以手动合并的内容到一个单一的multi/stack.yaml或运行stack initmulti产生一个新multi/stack.yaml的内容mig/mig.cabalche/che.cabal作为一个整体stack.yaml构建的每个项目集合都应该只有一个

多/ stack.yaml

resolver: lts-13.26
packages:
- che
- mig

多/ che / che.cabal

name:                che
version:             0.1.0.0
build-type:          Simple
cabal-version:       >=1.10
library
  default-language:    Haskell2010
  exposed-modules:     Che
  build-depends:       base >= 4.7 && < 5

多/ che / Che.hs

module Che where
che :: IO ()
che = putStrLn "Viva la revolution"

多/ mig / mig.cabal

name:                mig
version:             0.1.0.0
build-type:          Simple
cabal-version:       >=1.10
executable mig
  default-language:    Haskell2010
  main-is:             Main.hs
  build-depends:       base >= 4.7 && < 5
                     , che

多重/ mig / Main.hs

import Che
main :: IO ()
main = che >> che >> che

更新:che自行开发

请注意,即使您还che自己进行开发/构建multi建议您使用上述设置来设置mig项目。特别是,如果您che希望不重建就进行构建mig(例如,如果您知道mig在进行操作时将被破坏che),则可以使用命令stack build che来代替stack build

如果你希望能够继续发展che,而不与版本干扰che正在使用的mig,然后做最简单的事情是git clone与工作目录新的存储库,你可以拥有的“前沿”复印件che(有自己的独立单包stack.yaml),您可以独立开发和构建,以及“稳定”依赖che于哪个(mig取决于git pull需要)。最好不要stack.yaml使用Git,或者将其命名或命名,stack.yaml.template然后将其符号链接或复制到stack.yaml

如果您确实想以che相同的方式对待Stack对待Stackage包,并且有一个mig依赖于全局che的单包项目,那么您可以:(1)开始上载到cheStackage并像对待其他Stackage一样对待它包; 或(2)extra_deps在该stack.yaml文件中添加,mig指向支持的全局包源。这可以是GitHub或其他可通过Web访问的存储库它可以是“存档”(例如,.tar.gz格式为git archive)存储在本地文件系统中;甚至本地文件系统中的Git存储库。对于最后一个选项,绝对路径可以正常工作,但是我认为不直接支持相对路径。它看起来像:

# in mig's stack.yaml
extra-deps:
- git: /home/me/src/haskell/che
  commit: 8ab4bf759dd934fa31cfca324748af894ca0e224

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使模块在全球范围内可用

在全球范围内使用MBProgressHUD +使其单例

$(this)如何在全球范围内可用

我应该在哪里放置类型/接口以使其在全球范围内可用?

使用npm在全球范围内安装软件是否安全?

node.js-使结果在全球范围内可用(请求模块)

这种关闭是否在全球范围内?

在故事书中让笑话在全球范围内可用

如何使AngularJS内置服务在全球范围内可用?

使扩展方法/属性在全球范围内可用

Angular服务在全球范围内可用吗?

只要至少有两个应用程序正在使用该模块,我是否应该在全球范围内安装该模块?

捆绑包是否在全球范围内安装gem

如何安装Flatpak程序,使其在系统范围内可用?

Magento使用部门在全球范围内更改价格

如何在全球范围内使用 SharedPreference?

Nightwatch.js e2e测试如何设置jQuery在全球范围内可用?

在全球范围内发布事件

在全球范围内禁止Spotbugs警告

在全球范围内举行PSSession

我如何在全球范围内构建微服务和 API?

Nancy模块在全球范围内被发现,如何通过.net实现相同的想法?

扩展在全球范围内公开的第三方模块

我如何要求在全球范围内随npm安装的模块?

如何使用Python的datetime模块确定当前时间是否在指定范围内?

如何使用Python的datetime模块确定当前时间是否在指定范围内?

Azure客户端ID在全球范围内是否唯一?

是否自动在全球范围内收回我的IRC昵称(不带下划线)?

Vue JS是否可以在全球范围内注册所有组件?