    {-|
    Module:      Data.Functor.Deriving
    Copyright:   (C) 2015-2017 Ryan Scott
    License:     BSD-style (see the file LICENSE)
    Maintainer:  Ryan Scott
    Portability: Template Haskell

    Exports functions to mechanically derive 'Functor' instances.

    For more info on how deriving @Functor@ works, see
    <https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/DeriveFunctor this GHC wiki page>.
    -}
    module Data.Functor.Deriving (
          -- * 'Functor'
          deriveFunctor
        , deriveFunctorOptions
        , makeFmap
        , makeFmapOptions
        , makeReplace
        , makeReplaceOptions
          -- * 'FFTOptions'
        , FFTOptions(..)
        , defaultFFTOptions
          -- * 'deriveFunctor' limitations
          -- $constraints
        ) where

    import Data.Functor.Deriving.Internal

    {- $constraints

    Be aware of the following potential gotchas:

    * Type variables of kind @* -> *@ are assumed to have 'Functor' constraints.
      If this is not desirable, use 'makeFmap'.
    -}