我有一個模塊使用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. NPM包不同版本的依賴
- 3. 不同版本的依賴關係
- 4. 鮑爾不同的依賴使用不同的jQuery版本
- 5. maven依賴版本?
- 6. Bower依賴版本
- 7. 斯卡拉+ Playframework 2.3.x版本進口依賴
- 8. 如何包含兩個不同版本的相同依賴項?
- 9. 2寶石需要不同版本的同一依賴
- 10. Maven中不同版本的相同依賴關係
- 11. Maven 2 - 從傳遞依賴版本定義依賴版本
- 12. [R包版本的依賴
- 13. 的Hadoop依賴於兩個不同版本的BeanUtils的
- 14. Maven的 - 傳遞依賴與不同版本的
- 15. 搖籃依賴管理 - 傳遞依賴版本不正確
- 16. Gradle依賴版本語法
- 17. TeamCity 7.0依賴和版本
- 18. Bower依賴版本衝突
- 19. 依賴版本衝突maven
- 20. django-nvd3依賴django版本
- 21. Nuget依賴關係版本
- 22. OpenCV庫依賴libpng版本
- 23. 依賴於不同版本的一些寶石
- 24. 如何結合依賴不同Spring版本的Spring庫?
- 25. 不同版本的多個彈簧依賴關係
- 26. 如何使依賴亭子下載不同版本的
- 27. 不同版本的依賴關係支持:設計
- 28. Maven 2 - 測試和編譯中的不同依賴版本
- 29. 鎖定不同紅寶石的gem依賴項版本
- 30. RPM依賴性如何覆蓋不同版本的Tomcat?
這正是我一直在尋找的,謝謝! – HaskellElephant 2011-04-03 17:30:12