Semantic CPP feature macros for base.
This provides a set of feature macros describing features of base
in a semantic way.
See <base-feature-macros.h> for the set of currently provided macros.
In order to use the CPP header provided by this package, add this package as a dependency to your .cabal
file, i.e.
build-depends: base-feature-macros: >= 0.1 && < 0.2
while making sure that the version specified as lower bound defines the feature-macros your code tests for. This is particularly important as CPP will implicitly treat undefined CPP macros as having the value 0
. See also GNU CPP/CC's -Wundef
warning to detect such errors; or starting with GHC 8.2, -Wcpp-undef can be used:
if impl(ghc >= 8.2)
ghc-options: -Wcpp-undef
Then in your code, you can include and use the <base-feature-macros.h>
header like so
module M where
#include <base-feature-macros.h>
#if !HAVE_FOLDABLE_TRAVERSABLE_IN_PRELUDE
import Data.Foldable (Foldable (..))
import Prelude hiding (foldr, foldr1)
#endif
#if !HAVE_MONOID_IN_PRELUDE
import Data.Monoid hiding ((<>))
#endif
This package is inspired by the blogpost "Make macros mean something – readable backwards compatibility with CPP".