-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Selectors for reading and updating data. -- -- References are data accessors that can read, write or update the -- accessed infromation through their context. They are first-class -- values, can be passed in functions, transformed, combined. References -- generalize lenses, folds and traversals for haskell (see: -- https://hackage.haskell.org/package/lens). -- -- References are more general than field selectors in traditional -- languages. -- -- -- -- There are two things that references can do but the previously -- mentioned access methods don't. -- -- -- -- Basic idea taken from the currently not maintained package -- https://hackage.haskell.org/package/yall. -- -- An example use of the references (a logger application that spawns new -- threads to update a global log): -- --
--   logger =
--     (forever $ do
--        log <- logChan ^? chan&logRecord    -- Extract the log record from the received log message
--        thrId <- forkIO (do time <- getTime
--                            ioref&lastLogTime != time $ logDB     -- Update the last logging time mutable log database
--                            let logMsg = senderThread .- show     -- Transform the thread id to a string and
--                                           $ loggingTime .= time  -- update the time
--                                           $ log                  -- inside the log message
--                            ioref&debugInfos !~ addLogEntry log $ logDB  -- update the table of log entries
--                            mvar !- (+1) $ count )
--        mvar !- (thrId:) $ updaters                               -- Record the spawned thread
--       ) `catch` stopUpdaters updaters
--     where stopUpdaters updaters ThreadKilled =
--             mvar&traverse !| killThread $ updaters               -- Kill all spawned threads before stopping
--   
-- -- There are a bunch of predefined references for datatypes included in -- standard libraries. -- -- New references can be created in several ways: -- -- @package references @version 0.3.2.2 -- | This module declares the representation and basic classes of -- references. Supplies primitive functions to create references. -- -- This module should not be imported directly. module Control.Reference.Representation -- | A reference is an accessor to a part or different view of some data. -- The referenc has a separate getter, setter and updater. In some cases, -- the semantics are a bit different -- --

Reference laws

-- -- As the references are generalizations of lenses, they should conform -- to the lens laws: -- -- 1) You get back what you put in: -- --
--   refSet l a s >>= refGet l return ≡ a
--   
-- -- 2) Putting back what you got doesn't change anything: -- --
--   refGet l return a >>= \b -> refSet l b s ≡ s
--   
-- -- 3) Setting twice is the same as setting once: -- --
--   refSet l a s >>= refSet l b ≡ refSet l b s
--   
-- -- But because update, set and get are different operations, . -- -- 4) Updating something is the same as getting and then setting (if the -- reader and writer monads are the same, or one can be converted into -- the other): -- --
--   refGet l a >>= f >>= \b -> refSet l b s ≡ refUpdate l f s
--   
-- -- This has some consequences. For example lensUpdate l id = -- return. -- --

Type arguments of Reference

-- -- -- -- Usually s and b determines t, t -- and a determines s. -- -- The reader monad usually have more information (Morph w -- r). data Reference w r w' r' s t a b Reference :: (forall x. (a -> r x) -> s -> r x) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> (forall x. (s -> r' x) -> a -> r' x) -> (t -> a -> w' b) -> ((s -> w' t) -> a -> w' b) -> Reference w r w' r' s t a b -- | Getter for the lens. Takes a monadic function and runs it on the -- accessed value. This is necessary to run actions after a read. [refGet] :: Reference w r w' r' s t a b -> forall x. (a -> r x) -> s -> r x -- | Setter for the lens [refSet] :: Reference w r w' r' s t a b -> b -> s -> w t -- | Updater for the lens. Handles monadic update functions. [refUpdate] :: Reference w r w' r' s t a b -> (a -> w b) -> s -> w t [refGet'] :: Reference w r w' r' s t a b -> forall x. (s -> r' x) -> a -> r' x [refSet'] :: Reference w r w' r' s t a b -> t -> a -> w' b [refUpdate'] :: Reference w r w' r' s t a b -> (s -> w' t) -> a -> w' b type IndexedReference i w r w' r' s t a b = i -> Reference w r w' r' s t a b bireference :: (RefMonads w r, RefMonads w' r') => (s -> r a) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> (a -> r' s) -> (t -> a -> w' b) -> ((s -> w' t) -> a -> w' b) -> Reference w r w' r' s t a b -- | Creates a reference. reference :: (RefMonads w r) => (s -> r a) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> Reference w r MU MU s t a b -- | Creates a reference where all operations are added in their original -- form. -- -- The use of this method is not suggested, because it is closely related -- to the representation of the references. rawReference :: (RefMonads w r, RefMonads w' r') => (forall x. (a -> r x) -> s -> r x) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> (forall x. (s -> r' x) -> a -> r' x) -> (t -> a -> w' b) -> ((s -> w' t) -> a -> w' b) -> Reference w r w' r' s t a b -- | Creates a reference with explicit close operations that are executed -- after the data is accessed. referenceWithClose :: (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) => (s -> r a) -> (s -> r ()) -> (b -> s -> w t) -> (s -> w ()) -> ((a -> w b) -> s -> w t) -> (s -> w ()) -> Reference w r MU MU s t a b -- | A simple class to enforce that both reader and writer semantics of the -- reference are Monads (as well as Applicatives and -- Functors) class (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) => RefMonads w r type MU = Proxy unusableOp :: a -> b -> MU c instance (GHC.Base.Functor w, GHC.Base.Applicative w, GHC.Base.Monad w, GHC.Base.Functor r, GHC.Base.Applicative r, GHC.Base.Monad r) => Control.Reference.Representation.RefMonads w r -- | This module defines the polymorphic types of the created references. -- The actual type of a reference can be different for every usage, the -- polymorphic type gives a lower bound on the actual one. module Control.Reference.Types -- | A monomorph Lens, Traversal, Partial, etc... -- Setting or updating does not change the type of the base. type Simple t s a = t s s a a type Getter r s t a b = Reference MU r MU MU s t a b type Setter w s t a b = Reference w MU MU MU s t a b -- | A two-way Reference that represents an isomorphism between two -- datatypes. Can be used to access the same data in two different -- representations. type Iso s t a b = forall w r w' r'. (RefMonads w r, RefMonads w' r') => Reference w r w' r' s t a b -- | A partial lens that can be turned to get a total lens. type Prism s t a b = forall w r w' r'. (RefMonads w r, RefMonads w' r', MonadPlus r, Morph Maybe r, MonadPlus w', Morph Maybe w') => Reference w r w' r' s t a b -- | A Reference that can access a part of data that exists in the -- context. A Lens can have any read and write semantics that a -- Reference can have. type Lens s t a b = forall w r. RefMonads w r => Reference w r MU MU s t a b -- | A reference that may not have the accessed element, and that can look -- for the accessed element in multiple locations. type RefPlus s t a b = forall w r. (RefMonads w r, MonadPlus r) => Reference w r MU MU s t a b -- | Partial lens. A Reference that can access data that may not -- exist in the context. Every lens is a partial lens. -- -- Any reference that is a partial lens should only perform the action -- given to its updateRef function if it can get a value (the -- value returned by getRef is not the lifted form of -- Nothing). type Partial s t a b = forall w r. (Functor w, Applicative w, Monad w, Functor r, Applicative r, MonadPlus r, Morph Maybe r) => Reference w r MU MU s t a b -- | A reference that can access data that is available in a number of -- instances inside the contexts. -- -- Any reference that is a Traversal should perform the action -- given to its updater in the exactly the same number of times that is -- the number of the values returned by it's getRef function. type Traversal s t a b = forall w r. (RefMonads w r, MonadPlus r, Morph Maybe r, Morph [] r) => Reference w r MU MU s t a b class (Morph IO w, Morph IO r, MorphControl IO w, MorphControl IO r) => IOMonads w r -- | A reference that can access mutable data. type IOLens s t a b = forall w r. (RefMonads w r, IOMonads w r) => Reference w r MU MU s t a b -- | A reference that can access mutable data that may not exist in the -- context. type IOPartial s t a b = forall w r. (RefMonads w r, IOMonads w r, MonadPlus r, Morph Maybe r) => Reference w r MU MU s t a b type IOTraversal s t a b = forall w r. (RefMonads w r, IOMonads w r, MonadPlus r, Morph Maybe r, Morph [] r) => Reference w r MU MU s t a b -- | A reference that can access a value inside a StateT transformed -- monad. type StateLens st m s t a b = forall w r. (RefMonads w r, Morph (StateT st m) w, Morph (StateT st m) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside a StateT transformed -- monad that may not exist. type StatePartial st m s t a b = forall w r. (RefMonads w r, Morph (StateT st m) w, MonadPlus r, Morph Maybe r, Morph (StateT st m) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside a StateT transformed -- monad that may exist in multiple instances. type StateTraversal st m s t a b = forall w r. (RefMonads w r, Morph (StateT st m) w, MonadPlus r, Morph Maybe r, Morph [] r, Morph (StateT st m) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside a WriterT -- transformed monad. type WriterLens st m s t a b = forall w r. (RefMonads w r, Morph (WriterT st m) w, Morph (WriterT st m) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside a WriterT -- transformed monad that may not exist. type WriterPartial st m s t a b = forall w r. (RefMonads w r, Morph (WriterT st m) w, MonadPlus r, Morph Maybe r, Morph (WriterT st m) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside a WriteT -- transformed monad that may exist in multiple instances. type WriterTraversal st m s t a b = forall w r. (RefMonads w r, Morph (WriterT st m) w, MonadPlus r, Morph Maybe r, Morph [] r, Morph (WriterT st m) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside an ST transformed -- monad. type STLens st s t a b = forall w r. (RefMonads w r, Morph (ST st) w, Morph (ST st) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside an ST transformed -- monad that may not exist. type STPartial st s t a b = forall w r. (RefMonads w r, Morph (ST st) w, MonadPlus r, Morph Maybe r, Morph (ST st) r) => Reference w r MU MU s t a b -- | A reference that can access a value inside an ST transformed -- monad that may exist in multiple instances. type STTraversal st s t a b = forall w r. (RefMonads w r, Morph (ST st) w, MonadPlus r, Morph Maybe r, Morph [] r, Morph (ST st) r) => Reference w r MU MU s t a b -- | A class for representing calculation in a simpler monad. -- --
--   pullBack . sink === id
--   
class MorphControl (m1 :: * -> *) (m2 :: * -> *) where data MSt m1 m2 a :: * where { data family MSt m1 m2 a :: *; } sink :: MorphControl m1 m2 => m2 a -> m1 (MSt m1 m2 a) pullBack :: MorphControl m1 m2 => m1 (MSt m1 m2 a) -> m2 a instance (Control.Instances.Morph.Morph GHC.Types.IO w, Control.Instances.Morph.Morph GHC.Types.IO r, Control.Reference.Types.MorphControl GHC.Types.IO w, Control.Reference.Types.MorphControl GHC.Types.IO r) => Control.Reference.Types.IOMonads w r instance GHC.Base.Monad m => Control.Reference.Types.MorphControl m (Control.Monad.Trans.Maybe.MaybeT m) instance GHC.Base.Monad m => Control.Reference.Types.MorphControl m (Control.Monad.Trans.List.ListT m) instance Control.Reference.Types.MorphControl GHC.Types.IO GHC.Types.IO instance GHC.Base.Monad m => Control.Reference.Types.MorphControl m Control.Reference.Representation.MU -- | Functions to create references from simple functions and members of -- the lens library. module Control.Reference.Generators -- | Generates a traversal for any Traversable Functor traversal :: (Traversable t) => Traversal (t a) (t b) a b -- | Generate a lens from a pair of inverse functions iso :: (a -> b) -> (b -> a) -> Simple Iso a b iso' :: (a -> b) -> (a' -> b') -> (b -> a) -> (b' -> a') -> Iso a a' b b' -- | Generates a lens from a getter and a setter lens :: (s -> a) -> (b -> s -> t) -> Lens s t a b -- | Creates a polymorphic partial lense -- -- Either t a is used instead of Maybe a to permit the -- types of s and t to differ. partial :: (s -> Either t (a, b -> t)) -> Partial s t a b -- | Creates a polymorphic partial lens that can be turned to give a total -- lens prism :: (a -> s) -> (b -> t) -> (s -> Either t a) -> (t -> Maybe b) -> Prism s t a b -- | Creates a monomorphic partial lens that can be turned to give a total -- lens simplePrism :: (a -> s) -> (s -> Maybe a) -> Prism s s a a -- | Creates a simple partial lens simplePartial :: (s -> Maybe (a, a -> s)) -> Partial s s a a -- | Clones a lens from Control.Lens fromLens :: (forall f. Functor f => (a -> f b) -> s -> f t) -> Lens s t a b -- | Clones a traversal from Control.Lens fromTraversal :: (forall f. Applicative f => (a -> f b) -> s -> f t) -> Traversal s t a b -- | References all the elements accessed by uniplate uniplateRef :: Uniplate a => Simple Traversal a a -- | References all the elements accessed by biplate biplateRef :: Biplate a b => Simple Traversal a b -- | Filters the traversed elements with a given predicate. Has specific -- versions for traversals and partial lenses. filtered :: (a -> Bool) -> Simple RefPlus a a -- | Operators to combine and transform references. module Control.Reference.Combinators -- | Composes two references. They must be of the same kind. -- -- If reference r accesses b inside the context -- a, and reference p accesses c inside the -- context b, than the reference r&p will access -- c inside a. -- -- Composition is associative: (r&p)&q = r&(p&q) -- (&) :: (Monad w, Monad r) => Reference w r w' r' s t c d -> Reference w r w' r' c d a b -> Reference w r w' r' s t a b infixl 6 & -- | Adds two references. -- -- Using this operator may result in accessing the same parts of data -- multiple times. For example twice = self &+& self -- is a reference that accesses itself twice: -- --
--   a ^? twice == [a,a]
--   (twice *= x) a == x
--   (twice .- f) a == f (f a)
--   
-- -- Addition is commutative only if we do not consider the order of the -- results from a get, or the order in which monadic actions are -- performed. (&+&) :: (RefMonads w r, RefMonads w' r', MonadPlus r, MonadPlus r', Morph [] r) => Reference w r w' r' s s a a -> Reference w r w' r' s s a a -> Reference w r w' r' s s a a infixl 5 &+& -- | Pack two references in parallel. (&|&) :: (RefMonads m m') => Reference m m m' m' s t a b -> Reference m m m' m' s' t' a' b' -> Reference m m m' m' (s, s') (t, t') (a, a') (b, b') infixl 5 &|& -- | Flips a reference to the other direction. The monads of the references -- can change when a reference is turned. turn :: Reference w r w' r' s t a b -> Reference w' r' w r a b s t -- | Common operators for using references. -- -- There are four kinds of operator for every type of reference. The -- operators are either getters (^. and ^?), setters -- (.= and !=), monadic updaters (.~ and !~), -- pure updaters (.- and !-) or action performers -- (!|). -- -- The former operators (with the dot) are pure operators, the later are -- monadic operators. For example, (1,2) ^. _1 results in a pure -- numeric value, while Right 4 ^? right produces Just -- 4 (or a higher level value representing Just 4). module Control.Reference.Operators -- | Pure getter operator (^.) :: s -> Getter Identity s t a b -> a infixl 4 ^. -- | Generic getter operator (^?) :: Monad m => s -> Getter m s t a b -> m a infixl 4 ^? -- | Gets the context from the referenced element by turning the reference. review :: Reference MU MU MU Identity s s a a -> a -> s -- | Pure setter function (.=) :: Setter Identity s t a b -> b -> s -> t infixl 4 .= -- | Monadic setter function (!=) :: Setter m s t a b -> b -> s -> m t infixl 4 != -- | Monadic updater with a pure result (.~) :: Setter Identity s t a b -> (a -> Identity b) -> s -> t infixl 4 .~ -- | Monadic updater (!~) :: Setter m s t a b -> (a -> m b) -> s -> m t infixl 4 !~ -- | Pure updater with pure function (.-) :: Setter Identity s t a b -> (a -> b) -> s -> t infixl 4 .- -- | Monadic update with pure function (!-) :: Monad m => Setter m s t a b -> (a -> b) -> s -> m t infixl 4 !- -- | Perform a given action monadically (!|) :: Monad m => Setter m s s a a -> (a -> m c) -> s -> m s infixl 4 !| -- | References for standard containers module Control.Reference.Predefined.Containers -- | Lenses for given values in a data structure that is indexed by keys. class Association e where type AssocIndex e :: * type AssocElem e :: * where { type family AssocIndex e :: *; type family AssocElem e :: *; } element :: Association e => AssocIndex e -> Simple Partial e (AssocElem e) class Association e => Mapping e at :: Mapping e => AssocIndex e -> Simple Lens e (Maybe (AssocElem e)) -- | Containers that can be used as a set, inserting and removing elements class SetLike e where type SetElem e :: * where { type family SetElem e :: *; } contains :: SetLike e => (SetElem e) -> Simple Lens e Bool instance Control.Reference.Predefined.Containers.Association [a] instance GHC.Arr.Ix i => Control.Reference.Predefined.Containers.Association (GHC.Arr.Array i a) instance Control.Reference.Predefined.Containers.Association (Data.Sequence.Seq a) instance Control.Reference.Predefined.Containers.Association Data.Text.Internal.Text instance GHC.Classes.Eq a => Control.Reference.Predefined.Containers.Association (a -> GHC.Base.Maybe b) instance GHC.Classes.Eq a => Control.Reference.Predefined.Containers.Mapping (a -> GHC.Base.Maybe b) instance GHC.Classes.Ord k => Control.Reference.Predefined.Containers.Association (Data.Map.Base.Map k v) instance GHC.Classes.Ord k => Control.Reference.Predefined.Containers.Mapping (Data.Map.Base.Map k v) instance Control.Reference.Predefined.Containers.Association (Data.IntMap.Base.IntMap v) instance Control.Reference.Predefined.Containers.Mapping (Data.IntMap.Base.IntMap v) instance GHC.Classes.Ord v => Control.Reference.Predefined.Containers.SetLike (Data.Set.Base.Set v) instance Control.Reference.Predefined.Containers.SetLike Data.IntSet.Base.IntSet -- | Predefined references for commonly used data structures and reference -- generators. -- -- When defining lenses one should use the more general types. For -- instance Lens instead of the more strict Lens'. This -- way references with different m1 and m2 monads can -- be combined if there is a monad m' for MMorph m1 m' -- and MMorph m2 m'. module Control.Reference.Predefined -- | An identical lens. Accesses the context. -- --
--   self & a = a & self = a
--   
self :: Lens a b a b -- | An empty reference that do not traverse anything -- --
--   emptyRef &+& a = a &+& emptyRef = a
--   
-- --
--   a & emptyRef = emptyRef & a = emptyRef
--   
emptyRef :: Simple RefPlus s a -- | An indexed lens for accessing points a function atArg :: Eq a => a -> Simple Lens (a -> b) b -- | A partial lens to access the value that may not exist just :: Prism (Maybe a) (Maybe b) a b -- | A partial lens to access the right option of an Either right :: Prism (Either a b) (Either a c) b c -- | A partial lens to access the left option of an Either left :: Prism (Either a c) (Either b c) a b -- | Access the value that is in the left or right state of an -- Either anyway :: Lens (Either a a) (Either b b) a b -- | References both elements of a tuple both :: Traversal (a, a) (b, b) a b -- | References the head of a list atHead :: Simple Lens [a] (Maybe a) -- | References the element at the head of the list headElem :: Simple Partial [a] a -- | References the tail of a list _tail :: Simple Partial [a] [a] -- | References a suffix of a list dropped :: Int -> Simple Partial [a] [a] -- | Views a list as an optinal pair view :: Iso [a] [b] (Maybe (a, [a])) (Maybe (b, [b])) -- | An isomorphism between the list and text representation of a string text :: Simple Iso String Text -- | Accesses the reversed version of a list -- --
--   'turn' reversed == reversed
--   
reversed :: Iso [a] [b] [a] [b] -- | Accesses the numerator of a ratio _numerator :: Integral a => Simple Lens (Ratio a) a -- | Accesses the denominator of a ratio _denominator :: Integral a => Simple Lens (Ratio a) a -- | Accesses the real part of a complex number _realPart :: RealFloat a => Simple Lens (Complex a) a -- | Accesses the imaginary part of a complex number _imagPart :: RealFloat a => Simple Lens (Complex a) a -- | Accesses the polar representation of a complex number _polar :: RealFloat a => Simple Lens (Complex a) (a, a) -- | A dummy object to interact with the user through the console. data Console Console :: Console -- | Interacts with a line of text on the console. Values set are printed, -- getting is reading from the console. consoleLine :: Simple IOLens Console String -- | Reference to the contents of the file. Not thread-safe. -- -- An empty file's content is Just "" while a non-existent -- file's is Nothing -- -- Creates a temporary file to store the result. fileContent :: Simple IOLens FilePath (Maybe String) -- | Access a value inside an MVar. Setting is not atomic. If there is two -- supplier that may set the accessed value, one may block and can -- corrupt the following updates. -- -- Reads and updates are done in sequence, always using consistent data. mvar :: Simple IOLens (MVar a) a -- | Generalized version of modifyMVarMasked_. modifyMVarMasked_ :: (Monad m, Morph IO m, MorphControl IO m) => MVar a -> (a -> m a) -> m () -- | Generalized version of mask_. mask_ :: (MorphControl IO m) => m a -> m a -- | Generalized version of onException. onException :: (MorphControl IO m) => m a -> m b -> m a chan :: Simple IOLens (Chan a) a -- | Access the value of an IORef. ioref :: Simple IOLens (IORef a) a -- | Access the state inside a state monad (from any context). state :: forall s m a. Monad m => Simple (StateLens s m) a s -- | Access the value inside an STRef stRef :: Simple (STLens s) (STRef s a) a -- | Filters an indexed reference based on the index whereOf :: (RefMonads w r, MonadPlus r) => (i -> Bool) -> (IndexedReference i w r MU MU s s a a) -> (IndexedReference i w r MU MU s s a a) -- | An interface with references that can be used internally while -- generating instances for MMorph and tuple lens classes. -- -- Only the public parts of Control.Reference.Representation are -- exported. -- -- For creating a new interface with different generated elements, use -- this internal interface. module Control.Reference.InternalInterface bireference :: (RefMonads w r, RefMonads w' r') => (s -> r a) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> (a -> r' s) -> (t -> a -> w' b) -> ((s -> w' t) -> a -> w' b) -> Reference w r w' r' s t a b -- | Creates a reference. reference :: (RefMonads w r) => (s -> r a) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> Reference w r MU MU s t a b -- | Creates a reference with explicit close operations that are executed -- after the data is accessed. referenceWithClose :: (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) => (s -> r a) -> (s -> r ()) -> (b -> s -> w t) -> (s -> w ()) -> ((a -> w b) -> s -> w t) -> (s -> w ()) -> Reference w r MU MU s t a b -- | A module for creating lenses to fields of simple, tuple data -- structures like pairs, triplets, and so on. module Control.Reference.TH.Tuple -- | A tuple configuration is a scheme for tuple-like data structures. data TupleConf TupleConf :: ([Name] -> Type) -> ([Name] -> Pat) -> ([Name] -> Exp) -> TupleConf [tupleType] :: TupleConf -> [Name] -> Type [tuplePattern] :: TupleConf -> [Name] -> Pat [tupleExpr] :: TupleConf -> [Name] -> Exp -- | Generates the normal haskell tuples ((a,b), (a,b,c), -- (a,b,c,d)) hsTupConf :: TupleConf -- | Creates Lens_1 ... Lens_n classes, and instances for -- tuples up to m. -- -- Classes and instances look like the following: -- --
--   class Lens_1 s t a b | s -> a, t -> b
--                        , a t -> s, b s -> t where 
--     _1 :: Lens s t a b
--   
--   instance Lens_1 (a,b) (a',b) a a' where 
--     _1 = lens ((a,b) -> a) (a' (a,b) -> (a',b))
--   
makeTupleRefs :: TupleConf -> Int -> Int -> Q [Dec] -- | A module where tuple classes and instances are created up to 16-tuple -- using makeTupleRefs. The number of classes and instances can be -- changed by hiding import from this module and calling -- makeTupleRefs in an other module. module Control.Reference.TupleInstances class Lens_1 s_asGP t_asGQ a_asGR b1_asGS | s_asGP -> a_asGR, t_asGQ -> b1_asGS, a_asGR t_asGQ -> s_asGP, b1_asGS s_asGP -> t_asGQ _1 :: Lens_1 s_asGP t_asGQ a_asGR b1_asGS => Lens s_asGP t_asGQ a_asGR b1_asGS class Lens_2 s_asGT t_asGU a_asGV b1_asGW | s_asGT -> a_asGV, t_asGU -> b1_asGW, a_asGV t_asGU -> s_asGT, b1_asGW s_asGT -> t_asGU _2 :: Lens_2 s_asGT t_asGU a_asGV b1_asGW => Lens s_asGT t_asGU a_asGV b1_asGW class Lens_3 s_asGX t_asGY a_asGZ b1_asH0 | s_asGX -> a_asGZ, t_asGY -> b1_asH0, a_asGZ t_asGY -> s_asGX, b1_asH0 s_asGX -> t_asGY _3 :: Lens_3 s_asGX t_asGY a_asGZ b1_asH0 => Lens s_asGX t_asGY a_asGZ b1_asH0 class Lens_4 s_asH1 t_asH2 a_asH3 b1_asH4 | s_asH1 -> a_asH3, t_asH2 -> b1_asH4, a_asH3 t_asH2 -> s_asH1, b1_asH4 s_asH1 -> t_asH2 _4 :: Lens_4 s_asH1 t_asH2 a_asH3 b1_asH4 => Lens s_asH1 t_asH2 a_asH3 b1_asH4 class Lens_5 s_asH5 t_asH6 a_asH7 b1_asH8 | s_asH5 -> a_asH7, t_asH6 -> b1_asH8, a_asH7 t_asH6 -> s_asH5, b1_asH8 s_asH5 -> t_asH6 _5 :: Lens_5 s_asH5 t_asH6 a_asH7 b1_asH8 => Lens s_asH5 t_asH6 a_asH7 b1_asH8 class Lens_6 s_asH9 t_asHa a_asHb b1_asHc | s_asH9 -> a_asHb, t_asHa -> b1_asHc, a_asHb t_asHa -> s_asH9, b1_asHc s_asH9 -> t_asHa _6 :: Lens_6 s_asH9 t_asHa a_asHb b1_asHc => Lens s_asH9 t_asHa a_asHb b1_asHc class Lens_7 s_asHd t_asHe a_asHf b1_asHg | s_asHd -> a_asHf, t_asHe -> b1_asHg, a_asHf t_asHe -> s_asHd, b1_asHg s_asHd -> t_asHe _7 :: Lens_7 s_asHd t_asHe a_asHf b1_asHg => Lens s_asHd t_asHe a_asHf b1_asHg class Lens_8 s_asHh t_asHi a_asHj b1_asHk | s_asHh -> a_asHj, t_asHi -> b1_asHk, a_asHj t_asHi -> s_asHh, b1_asHk s_asHh -> t_asHi _8 :: Lens_8 s_asHh t_asHi a_asHj b1_asHk => Lens s_asHh t_asHi a_asHj b1_asHk class Lens_9 s_asHl t_asHm a_asHn b1_asHo | s_asHl -> a_asHn, t_asHm -> b1_asHo, a_asHn t_asHm -> s_asHl, b1_asHo s_asHl -> t_asHm _9 :: Lens_9 s_asHl t_asHm a_asHn b1_asHo => Lens s_asHl t_asHm a_asHn b1_asHo class Lens_10 s_asHp t_asHq a_asHr b1_asHs | s_asHp -> a_asHr, t_asHq -> b1_asHs, a_asHr t_asHq -> s_asHp, b1_asHs s_asHp -> t_asHq _10 :: Lens_10 s_asHp t_asHq a_asHr b1_asHs => Lens s_asHp t_asHq a_asHr b1_asHs class Lens_11 s_asHt t_asHu a_asHv b1_asHw | s_asHt -> a_asHv, t_asHu -> b1_asHw, a_asHv t_asHu -> s_asHt, b1_asHw s_asHt -> t_asHu _11 :: Lens_11 s_asHt t_asHu a_asHv b1_asHw => Lens s_asHt t_asHu a_asHv b1_asHw class Lens_12 s_asHx t_asHy a_asHz b1_asHA | s_asHx -> a_asHz, t_asHy -> b1_asHA, a_asHz t_asHy -> s_asHx, b1_asHA s_asHx -> t_asHy _12 :: Lens_12 s_asHx t_asHy a_asHz b1_asHA => Lens s_asHx t_asHy a_asHz b1_asHA class Lens_13 s_asHB t_asHC a_asHD b1_asHE | s_asHB -> a_asHD, t_asHC -> b1_asHE, a_asHD t_asHC -> s_asHB, b1_asHE s_asHB -> t_asHC _13 :: Lens_13 s_asHB t_asHC a_asHD b1_asHE => Lens s_asHB t_asHC a_asHD b1_asHE class Lens_14 s_asHF t_asHG a_asHH b1_asHI | s_asHF -> a_asHH, t_asHG -> b1_asHI, a_asHH t_asHG -> s_asHF, b1_asHI s_asHF -> t_asHG _14 :: Lens_14 s_asHF t_asHG a_asHH b1_asHI => Lens s_asHF t_asHG a_asHH b1_asHI class Lens_15 s_asHJ t_asHK a_asHL b1_asHM | s_asHJ -> a_asHL, t_asHK -> b1_asHM, a_asHL t_asHK -> s_asHJ, b1_asHM s_asHJ -> t_asHK _15 :: Lens_15 s_asHJ t_asHK a_asHL b1_asHM => Lens s_asHJ t_asHK a_asHL b1_asHM class Lens_16 s_asHN t_asHO a_asHP b1_asHQ | s_asHN -> a_asHP, t_asHO -> b1_asHQ, a_asHP t_asHO -> s_asHN, b1_asHQ s_asHN -> t_asHO _16 :: Lens_16 s_asHN t_asHO a_asHP b1_asHQ => Lens s_asHN t_asHO a_asHP b1_asHQ instance Control.Reference.TupleInstances.Lens_1 (a0, a1) (b20, a1) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2) (b20, a1, a2) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3) (b20, a1, a2, a3) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4) (b20, a1, a2, a3, a4) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5) (b20, a1, a2, a3, a4, a5) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6) (b20, a1, a2, a3, a4, a5, a6) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7) (b20, a1, a2, a3, a4, a5, a6, a7) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (b20, a1, a2, a3, a4, a5, a6, a7, a8) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a0 b20 instance Control.Reference.TupleInstances.Lens_1 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (b20, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a0 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1) (a0, b20) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2) (a0, b20, a2) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3) (a0, b20, a2, a3) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4) (a0, b20, a2, a3, a4) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5) (a0, b20, a2, a3, a4, a5) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6) (a0, b20, a2, a3, a4, a5, a6) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, b20, a2, a3, a4, a5, a6, a7) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, b20, a2, a3, a4, a5, a6, a7, a8) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 b20 instance Control.Reference.TupleInstances.Lens_2 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, b20, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2) (a0, a1, b20) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3) (a0, a1, b20, a3) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4) (a0, a1, b20, a3, a4) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5) (a0, a1, b20, a3, a4, a5) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6) (a0, a1, b20, a3, a4, a5, a6) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, a1, b20, a3, a4, a5, a6, a7) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, b20, a3, a4, a5, a6, a7, a8) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9, a10) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2 b20 instance Control.Reference.TupleInstances.Lens_3 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, b20, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3) (a0, a1, a2, b20) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4) (a0, a1, a2, b20, a4) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5) (a0, a1, a2, b20, a4, a5) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6) (a0, a1, a2, b20, a4, a5, a6) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, a1, a2, b20, a4, a5, a6, a7) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, a2, b20, a4, a5, a6, a7, a8) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9, a10) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9, a10, a11) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3 b20 instance Control.Reference.TupleInstances.Lens_4 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, b20, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4) (a0, a1, a2, a3, b20) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5) (a0, a1, a2, a3, b20, a5) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6) (a0, a1, a2, a3, b20, a5, a6) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, a1, a2, a3, b20, a5, a6, a7) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, a2, a3, b20, a5, a6, a7, a8) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9, a10) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9, a10, a11) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9, a10, a11, a12) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9, a10, a11, a12, a13) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a4 b20 instance Control.Reference.TupleInstances.Lens_5 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, b20, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a4 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5) (a0, a1, a2, a3, a4, b20) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6) (a0, a1, a2, a3, a4, b20, a6) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, a1, a2, a3, a4, b20, a6, a7) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, a2, a3, a4, b20, a6, a7, a8) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9, a10) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9, a10, a11) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9, a10, a11, a12) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9, a10, a11, a12, a13) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9, a10, a11, a12, a13, a14) a5 b20 instance Control.Reference.TupleInstances.Lens_6 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, b20, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a5 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6) (a0, a1, a2, a3, a4, a5, b20) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, a1, a2, a3, a4, a5, b20, a7) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, a2, a3, a4, a5, b20, a7, a8) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9, a10) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9, a10, a11) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9, a10, a11, a12) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9, a10, a11, a12, a13) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9, a10, a11, a12, a13, a14) a6 b20 instance Control.Reference.TupleInstances.Lens_7 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, b20, a7, a8, a9, a10, a11, a12, a13, a14, a15) a6 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7) (a0, a1, a2, a3, a4, a5, a6, b20) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, a2, a3, a4, a5, a6, b20, a8) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9, a10) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9, a10, a11) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9, a10, a11, a12) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9, a10, a11, a12, a13) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9, a10, a11, a12, a13, a14) a7 b20 instance Control.Reference.TupleInstances.Lens_8 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, b20, a8, a9, a10, a11, a12, a13, a14, a15) a7 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8) (a0, a1, a2, a3, a4, a5, a6, a7, b20) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9, a10) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9, a10, a11) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9, a10, a11, a12) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9, a10, a11, a12, a13) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9, a10, a11, a12, a13, a14) a8 b20 instance Control.Reference.TupleInstances.Lens_9 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, b20, a9, a10, a11, a12, a13, a14, a15) a8 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20) a9 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20, a10) a9 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20, a10, a11) a9 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20, a10, a11, a12) a9 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20, a10, a11, a12, a13) a9 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20, a10, a11, a12, a13, a14) a9 b20 instance Control.Reference.TupleInstances.Lens_10 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, b20, a10, a11, a12, a13, a14, a15) a9 b20 instance Control.Reference.TupleInstances.Lens_11 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b20) a10 b20 instance Control.Reference.TupleInstances.Lens_11 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b20, a11) a10 b20 instance Control.Reference.TupleInstances.Lens_11 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b20, a11, a12) a10 b20 instance Control.Reference.TupleInstances.Lens_11 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b20, a11, a12, a13) a10 b20 instance Control.Reference.TupleInstances.Lens_11 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b20, a11, a12, a13, a14) a10 b20 instance Control.Reference.TupleInstances.Lens_11 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b20, a11, a12, a13, a14, a15) a10 b20 instance Control.Reference.TupleInstances.Lens_12 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b20) a11 b20 instance Control.Reference.TupleInstances.Lens_12 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b20, a12) a11 b20 instance Control.Reference.TupleInstances.Lens_12 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b20, a12, a13) a11 b20 instance Control.Reference.TupleInstances.Lens_12 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b20, a12, a13, a14) a11 b20 instance Control.Reference.TupleInstances.Lens_12 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b20, a12, a13, a14, a15) a11 b20 instance Control.Reference.TupleInstances.Lens_13 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, b20) a12 b20 instance Control.Reference.TupleInstances.Lens_13 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, b20, a13) a12 b20 instance Control.Reference.TupleInstances.Lens_13 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, b20, a13, a14) a12 b20 instance Control.Reference.TupleInstances.Lens_13 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, b20, a13, a14, a15) a12 b20 instance Control.Reference.TupleInstances.Lens_14 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, b20) a13 b20 instance Control.Reference.TupleInstances.Lens_14 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, b20, a14) a13 b20 instance Control.Reference.TupleInstances.Lens_14 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, b20, a14, a15) a13 b20 instance Control.Reference.TupleInstances.Lens_15 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, b20) a14 b20 instance Control.Reference.TupleInstances.Lens_15 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, b20, a15) a14 b20 instance Control.Reference.TupleInstances.Lens_16 (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, b20) a15 b20 -- | An example module that adds references for Template Haskell. These -- references are used to create the TH functions that generate -- references. module Control.Reference.Examples.TH -- | Reference all type variables inside a type typeVariableNames :: Simple Traversal Type Name -- | Reference the name of the type variable typeVar :: Simple Partial Type Name -- | Reference all type variables inside a type typeVariables :: Simple Traversal Type Type -- | Reference all type variables not binded by a forall freeTypeVariables :: Simple Traversal Type Type -- | Reference the name of the type variable inside a type variable binder typeVarName :: Simple Lens TyVarBndr Name -- | Reference the characters of the name. If changed there is no guarantee -- that the created name will be unique. nameBaseStr :: Simple Lens Name String -- | Reference the record fields in a constructor. recFields :: Simple Partial Con [(Name, Strict, Type)] -- | Reference all fields (data members) in a constructor. conFields :: Simple Lens Con [(Strict, Type)] -- | Reference types of fields conTypes :: Simple Traversal Con Type -- | Reference the name of the constructor conName :: Simple Lens Con Name -- | Access a function application as a list of expressions with the -- function application at the head of the list and the arguments on it's -- tail. funApplication :: Simple Iso Exp [Exp] -- | Accesses the name of the defined object. Does not return name in -- signatures. definedName :: Simple Partial Dec Name -- | Accesses the constructors of a data or newtype definition. After -- changing the definition becames a newtype if there is only one -- constructor. definedConstructors :: Simple Partial Dec [Con] -- | Accesses the type variables of a definition definedTypeArgs :: Simple Partial Dec [TyVarBndr] module Control.Reference.Predefined.Containers.Tree instance Control.Reference.Predefined.Containers.Association (Data.Tree.Tree v) -- | This module can be used to generate references for record fields. If -- the field surely exists, a Lens will be generated. If the field -- may not exist, it will be a Partial lens. -- -- It will have the maximum amount of polymorphism it can create. -- -- If the name of the field starts with "_", the name of the field will -- be the same with "_" removed. If not, the reference name will be the -- field name with "_" added te the start. -- -- The following code sample: -- --
--   data Maybe' a = Just' { _fromJust' :: a }
--                 | Nothing'
--   $(makeReferences ''Maybe)
--   
--   data Tuple a b = Tuple { _fst' :: a, _snd' :: b }
--   $(makeReferences ''Tuple)
--   
-- -- Is equivalent to: -- --
--   data Maybe' a = Just' { _fromJust' :: a }
--                 | Nothing'
--                 
--   fromJust' :: Partial (Maybe' a) (Maybe' b) a b
--   fromJust' = partial (case Just' x -> Right (x, y -> return (Just' y))
--                              Nothing' -> Left (return Nothing'))
--   
--   data Tuple a b = Tuple { _fst' :: a, _snd' :: b }
--   fst' :: Lens (Tuple a c) (Tuple b c) a b
--   fst' = lens _fst' (b tup -> tup { _fst' = b })
--   snd' :: Lens (Tuple a c) (Tuple a d) c d
--   snd' = lens _snd' (b tup -> tup { _snd' = b })
--   
module Control.Reference.TH.Records -- | Creates references for fields of a data structure. makeReferences :: Name -> Q [Dec] -- | Shows the generated declarations instead of using them. debugTH :: Q [Dec] -> Q [Dec] instance Control.Instances.Morph.Morph (Control.Monad.Trans.State.Lazy.StateT s m) (Control.Monad.Trans.State.Lazy.StateT s m) -- | A frontend module for the Control.Reference package module Control.Reference