我有一个模块使用Control.Exception
在Base < 4
这是 Control.OldException
。如何在使用Base >= 4
和Control.Exception
时使用cabal或任何其他工具摆脱版本依赖关系(仅取决于Base
而不是Base < 4
)并导入Control.OldException
?当使用Base < 4
时使用Base >= 4
和Control.Exception
?依赖版本的不同进口
回答
cabal
automatically sets certain CPP definitions根据使用的软件包版本。
因此,对于你的情况我会:
{-# LANGUAGE CPP #-}
module Blah where
#if MIN_VERSION_base(0,4,0)
import Control.OldException
#else
import Control.Exception
#endif
此方法构建罚款阴谋。
(实际上,我会用新的异常,并不会理会配套基地< 4,不过这只是我)
这是一个语言不可知的答案,所以它可能不适用于你。
有一对夫妇选择
- 裹在具有两种实现一个SuperException两个例外。给它一个参数,告诉它基于
Base
使用什么实现。 - 重构异常是带有重载调用的OldException的子节点。 (最佳选项)
你是对的,这不适用于此,这将需要重构Haskells标准库。我无法做的事情= D。你可能没有意识到的是,Control.Exception不是一个类,它是一个模块。 – HaskellElephant 2011-04-03 17:29:31
随着惊天动地,这是与“旗帜”,其约束求解算法来实现。一个例子(从control-monad-exception上Hackage):
Flag extensibleExceptions
description: Use extensible-exception package
default: False
(...)
if flag(extensibleExceptions)
build-depends:
extensible-exceptions >= 0.1 && <0.2,
base >= 3.0 && <4
else
build-depends:
base >= 4 && < 5
在使用旧版本的base
一台机器,惊天动地将尝试解决extensibleExceptions False
的依赖,失败,然后用它True
重试,并使用不同的build-depends
,这将会成功。 (您也可以通过命令行打开国旗。)
http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#configurations文件这一机制,并在页面的其余部分将介绍其他机制,包括直接的条件语句,如if impl(ghc >= 6.10.0)
。
这是与他正在做的事情相反的解决方案(因为他正在使用_new_异常)。由于他使用的是旧的异常(不幸),并且'Control.OldException'仍然在基础中(不幸),所以他只需要使用CPP。不幸。 – 2011-04-03 20:41:58
- 1. Maven依赖与不同版本的同一子依赖性
- 2. 不同版本的依赖关系
- 3. NPM包不同版本的依赖
- 4. 进口,依赖
- 5. 斯卡拉+ Playframework 2.3.x版本进口依赖
- 6. 2宝石需要不同版本的同一依赖
- 7. 如何包含两个不同版本的相同依赖项?
- 8. Maven中不同版本的相同依赖关系
- 9. Maven 2 - 从传递依赖版本定义依赖版本
- 10. Maven的 - 传递依赖与不同版本的
- 11. 摇篮依赖管理 - 传递依赖版本不正确
- 12. 如何使依赖亭子下载不同版本的
- 13. 不同版本的依赖关系支持:设计
- 14. 不同版本的多个弹簧依赖关系
- 15. Maven - 测试中的不同依赖版本
- 16. TeamCity 7.0依赖和版本
- 17. Nuget依赖关系版本
- 18. Bower依赖版本冲突
- 19. OpenCV库依赖libpng版本
- 20. 使C#user.config不依赖于版本
- 21. 力依赖于使用特定的子版本的依赖
- 22. JS&HTML post不同表依赖于浏览器版本
- 23. 依赖瓶子版本不同在maven和gradle构建
- 24. 依赖关系版本错误我不能改变版本
- 25. NPM锁定依赖包中的依赖版本package.json
- 26. Maven。查找包含依赖的版本由依赖
- 27. setuptools的依赖和进口问题
- 28. 继承的Maven的依赖版本
- 29. 使用相同节点依赖关系的两个不同版本
- 30. Gem依赖版本的含义
这正是我一直在寻找的,谢谢! – HaskellElephant 2011-04-03 17:30:12