С Cabal это делается с помощью «флагов» и алгоритма решения его ограничений. Пример (из control-monad-exception on 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
Cabal попытается решить зависимость с помощью 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)
.