{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Diagrams.Prelude
-- Copyright   :  (c) 2011-2015 diagrams-lib team (see LICENSE)
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  diagrams-discuss@googlegroups.com
--
-- A module to re-export most of the functionality of the diagrams
-- core and standard library.
--
-----------------------------------------------------------------------------

module Diagrams.Prelude
  (
    -- * Diagrams library
    -- | Exports from this library for working with diagrams.
    module Diagrams

    -- * Convenience re-exports from other packages

    -- | For working with default values. Diagrams also exports 'with',
    --   an alias for 'def'.
  , module Data.Default.Class

    -- | For representing and operating on colors.
  , module Data.Colour

    -- | A large list of color names.
  , module Data.Colour.Names

    -- | Specify your own colours.
  , module Data.Colour.SRGB

    -- | Semigroups and monoids show up all over the place, so things from
    --   Data.Semigroup and Data.Monoid often come in handy.
  , module Data.Semigroup

    -- | For computing with vectors.
  , module Linear.Vector

    -- | For computing with points and vectors.
  , module Linear.Affine

    -- | For computing with dot products and norm.
  , module Linear.Metric

    -- | For working with 'Active' (i.e. animated) things.
  , module Data.Active

    -- | Most of the lens package. The following functions are not
    --   exported from lens because they either conflict with
    --   diagrams or may conflict with other libraries:
    --
    --   * 'Control.Lens.At.at'
    --   * 'Control.Lens.At.contains'
    --   * 'Control.Lens.Indexed..>'
    --   * 'Control.Lens.Indexed.<.>'
    --   * 'Control.Lens.Indexed.index'
    --   * 'Control.Lens.Indexed.indices'
    --   * 'Control.Lens.Indexed.none'
    --   * 'Control.Lens.Internal.Getter.coerce'
    --   * 'Control.Lens.Internal.Indexed.indexed'
    --   * 'Control.Lens.Lens.inside'
    --   * 'Control.Lens.Level.levels'
    --   * 'Control.Lens.Plated....'
    --   * 'Control.Lens.Plated.children'
    --   * 'Control.Lens.Plated.transform'
    --   * 'Control.Lens.Prism.outside'
    --   * 'Control.Lens.Setter.argument'
    --   * 'Control.Lens.Traversal.beside'
    --   * 'Control.Lens.Traversal.singular'
  , module Control.Lens

  , Applicative(..), (*>), (<*), (<$>), (<$), liftA, liftA2, liftA3
  ) where

import           Diagrams

import           Control.Applicative

#if MIN_VERSION_lens(4,13,0)
import           Control.Lens        hiding (argument, at, backwards, beside,
                                      children, contains, indexed, indices,
                                      inside, levels, none, outside, singular,
                                      transform, ( # ), (...), (.>), (<.>))
#else
import           Control.Lens        hiding (argument, at, backwards, beside,
                                      children, coerce, contains, indexed,
                                      indices, inside, levels, none, outside,
                                      singular, transform, ( # ), (...), (.>),
                                      (<.>))
#endif

import           Data.Active
import           Data.Colour         hiding (AffineSpace (..), atop, over)
import           Data.Colour.Names   hiding (tan)
import           Data.Colour.SRGB
import           Data.Default.Class
import           Data.Semigroup

import           Linear.Affine
import           Linear.Metric
import           Linear.Vector
