-------------------------------------------------------------------------------
-- |
-- Module      :  Control.Lens.Loupe
-- Copyright   :  (C) 2012-14 Edward Kmett
-- License     :  BSD-style (see the file LICENSE)
-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
-- Stability   :  provisional
-- Portability :  Rank2Types
--
-- This module exports a minimalist API for working with lenses in highly
-- monomorphic settings.
-------------------------------------------------------------------------------
module Control.Lens.Loupe
  (
    ALens, ALens'
  , cloneLens
  , storing
  , (^#)
  , ( #~ ), ( #%~ ), ( #%%~ ), (<#~), (<#%~)
  , ( #= ), ( #%= ), ( #%%= ), (<#=), (<#%=)
  -- * Deprecated Aliases
  , Loupe, SimpleLoupe
  ) where

import Control.Lens.Internal.Context
import Control.Lens.Lens
import Control.Lens.Type

-- | This is an older alias for a type-restricted form of lens that is able to be passed around
-- in containers monomorphically.
--
-- Deprecated. This has since been renamed to 'ALens' for consistency.
type Loupe s t a b = LensLike (Pretext (->) a b) s t a b
{-# DEPRECATED Loupe "use ALens" #-}

-- | @
-- type 'SimpleLoupe' = 'Simple' 'Loupe'
-- @
--
-- Deprecated for two reasons. 'Loupe' is now 'ALens', and we no longer use the verbose @SimpleFoo@ naming
-- convention, this has since been renamed to 'ALens'' for consistency.
type SimpleLoupe s a = Loupe s s a a
{-# DEPRECATED SimpleLoupe "use ALens'" #-}