-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Basic lens type and functions -- -- Necessary type and functions for basic lens work. -- -- Handy to depend on for libraries and general light-weight use, -- including PITA environments, old GHCs and non-GHC implementations with -- Rank-N type support. Depends on only on base. @package basic-lens @version 0.0.1 -- | Basic lens type and functions. -- -- The lens package should be a drop-in replacement for this. module Control.Lens.Basic -- | Purpose -- -- A value of type Lens s t a b provides the following: -- -- -- -- The Functor constraint -- -- Operations may do something more interesting inside the f -- functor. For the purpose of this module and package, all the functions -- below (view, over, set) use a no-op functor and -- therefore the above type is equivalent to: -- --
--   type Lens s t a b = (a -> b) -> (s -> t)
--   
-- -- But it is left generic for forward compatibilty with the lens package. -- -- Example -- --
--   λ> data Person = Person Char Int deriving Show
--   λ> let _age f (Person x a) = fmap (\b -> Person x b) (f a)
--   λ> view _age (Person a 10)
--   10
--   λ> over _age (+1) (Person a 10)
--   Person a 11
--   λ> set _age 100 (Person a 10)
--   Person a 100
--   λ>
--   
-- -- Laws -- -- 1) Get-Put: You get back what you put in. -- --
--   view l (set l v s) ≡ v
--   
-- -- 2) Put-Get: Putting back what you got doesn't change anything. -- --
--   set l (view l s) s ≡ s
--   
-- -- 3) Put-Put: Setting is idempotent. -- --
--   set l v (set l v s) ≡ set l v s
--   
type Lens s t a b = forall f. Functor f => (a -> f b) -> (s -> f t) -- | Get the a inside the s. view :: Lens s t a b -> s -> a -- | Set the a inside the s, optionally changing the -- types to b and t. set :: Lens s t a b -> b -> s -> t -- | Modify the a inside the s, optionally changing the -- types to b and t. over :: Lens s t a b -> (a -> b) -> s -> t instance GHC.Base.Functor Control.Lens.Basic.Id