name: base-feature-macros
version: 0.1
synopsis: Semantic CPP feature macros for base
license: BSD3
license-file: LICENSE
author: Herbert Valerio Riedel
maintainer: hvr@gnu.org
category: Development
build-type: Simple
cabal-version: >=1.10
bug-reports: https://github.com/hvr/base-feature-macros/issues
description: This provides a set of feature macros describing features of @base@ in a semantic way.
.
See <src/base-feature-macros.h base-feature-macros.h> for 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.
.
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
<https://github.com/quchen/articles/blob/master/haskell-cpp-compatibility.md "Make macros mean something – readable backwards compatibility with CPP">.
source-repository head
type: git
location: https://github.com/hvr/base-feature-macros.git
library
build-depends: base >=4.3 && <4.11
default-language: Haskell2010
install-includes: base-feature-macros.h