我有一個模塊使用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