name:                   generic-deriving
version:                1.14.6
synopsis:               Generic programming library for generalised deriving.
description:

  This package provides functionality for generalising the deriving mechanism
  in Haskell to arbitrary classes. It was first described in the paper:
  .
  *  /A generic deriving mechanism for Haskell/.
     Jose Pedro Magalhaes, Atze Dijkstra, Johan Jeuring, and Andres Loeh.
     Haskell'10.
  .
  The current implementation integrates with the new GHC Generics. See
  <http://www.haskell.org/haskellwiki/GHC.Generics> for more information.
  Template Haskell code is provided for supporting older GHCs.
  .
  This library is organized as follows:
  .
  * "Generics.Deriving.Base" defines the core functionality for GHC generics,
    including the @Generic(1)@ classes and representation data types.
    On modern versions of GHC, this simply re-exports "GHC.Generics" from
    @base@. On older versions of GHC, this module backports parts of
    "GHC.Generics" that were not included at the time, including @Generic(1)@
    instances.
  .
  * "Generics.Deriving.TH" implements Template Haskell functionality for
    deriving instances of @Generic(1)@.
  .
  * Educational code: in order to provide examples of how to define and use
    "GHC.Generics"-based defaults, this library offers a number of modules
    which define examples of type classes along with default implementations
    for the classes' methods. Currently, the following modules are provided:
    "Generics.Deriving.Copoint", "Generics.Deriving.ConNames",
    "Generics.Deriving.Enum", "Generics.Deriving.Eq",
    "Generics.Deriving.Foldable", "Generics.Deriving.Functor",
    "Generics.Deriving.Monoid", "Generics.Deriving.Semigroup",
    "Generics.Deriving.Show", "Generics.Deriving.Traversable",
    and "Generics.Deriving.Uniplate".
    .
    It is worth emphasizing that these modules are primarly intended for
    educational purposes. Many of the classes in these modules resemble other
    commonly used classes—for example, @GShow@ from "Generics.Deriving.Show"
    resembles @Show@ from @base@—but in general, the classes that
    @generic-deriving@ defines are not drop-in replacements. Moreover, the
    generic defaults that @generic-deriving@ provide often make simplifying
    assumptions that may violate expectations of how these classes might work
    elsewhere. For example, the generic default for @GShow@ does not behave
    exactly like @deriving Show@ would.
    .
    If you are seeking "GHC.Generics"-based defaults for type classes in
    @base@, consider using the
    @<http://hackage.haskell.org/package/generic-data generic-data>@ library.
  .
  * "Generics.Deriving.Default" provides newtypes that allow leveraging the
    generic defaults in this library using the @DerivingVia@ GHC language
    extension.
  .
  * "Generics.Deriving" re-exports "Generics.Deriving.Base",
    "Generics.Deriving.Default", and a selection of educational modules.

homepage:               https://github.com/dreixel/generic-deriving
bug-reports:            https://github.com/dreixel/generic-deriving/issues
category:               Generics
copyright:              2011-2013 Universiteit Utrecht, University of Oxford
license:                BSD3
license-file:           LICENSE
author:                 José Pedro Magalhães
maintainer:             generics@haskell.org
stability:              experimental
build-type:             Simple
cabal-version:          >= 1.10
tested-with:
                        GHC == 8.0.2
                      , GHC == 8.2.2
                      , GHC == 8.4.4
                      , GHC == 8.6.5
                      , GHC == 8.8.4
                      , GHC == 8.10.7
                      , GHC == 9.0.2
                      , GHC == 9.2.8
                      , GHC == 9.4.8
                      , GHC == 9.6.6
                      , GHC == 9.8.4
                      , GHC == 9.10.1
                      , GHC == 9.12.1

extra-source-files:     CHANGELOG.md
                      , README.md

source-repository head
  type: git
  location: https://github.com/dreixel/generic-deriving

library
  hs-source-dirs:       src
  exposed-modules:      Generics.Deriving
                        Generics.Deriving.Base
                        Generics.Deriving.Instances
                        Generics.Deriving.Copoint
                        Generics.Deriving.ConNames
                        Generics.Deriving.Default
                        Generics.Deriving.Enum
                        Generics.Deriving.Eq
                        Generics.Deriving.Foldable
                        Generics.Deriving.Functor
                        Generics.Deriving.Monoid
                        Generics.Deriving.Semigroup
                        Generics.Deriving.Show
                        Generics.Deriving.Traversable
                        Generics.Deriving.Uniplate

                        Generics.Deriving.TH

  other-modules:        Generics.Deriving.Monoid.Internal
                        Generics.Deriving.Semigroup.Internal
                        Generics.Deriving.TH.Internal
                        Generics.Deriving.TH.Post4_9
                        Paths_generic_deriving

  build-depends:        base             >= 4.9   && < 5
                      , containers       >= 0.1   && < 0.8
                      , ghc-prim                     < 1
                      , template-haskell >= 2.11  && < 2.24
                        -- TODO: Eventually, we should bump the lower version
                        -- bounds to >=0.6 so that we can remove some CPP in
                        -- Generics.Deriving.TH.Internal.
                      , th-abstraction   >= 0.4   && < 0.8

  default-language:     Haskell2010
  ghc-options:          -Wall

test-suite spec
  type:                 exitcode-stdio-1.0
  main-is:              Spec.hs
  other-modules:        DefaultSpec
                        EmptyCaseSpec
                        ExampleSpec
                        T68Spec
                        T80Spec
                        T82Spec
                        TypeInTypeSpec
  build-depends:        base
                      , generic-deriving
                      , hspec            >= 2    && < 3
                      , template-haskell
  build-tool-depends:   hspec-discover:hspec-discover
  hs-source-dirs:       tests
  default-language:     Haskell2010
  ghc-options:          -Wall -threaded -rtsopts
  if impl(ghc >= 8.6)
    ghc-options:        -Wno-star-is-type