úΗNoneOTPurposeA value of type  Lens s t a b provides the following:A reference into the structure s to read and update the value a inside it.&The possibility to change the type of s to t and the type of a to b.The Functor constraint8Operations may do something more interesting inside the fQ functor. For the purpose of this module and package, all the functions below (, , E) use a no-op functor and therefore the above type is equivalent to: (type Lens s t a b = (a -> b) -> (s -> t)GBut it is left generic for forward compatibilty with the lens package.Example t»> data Person = Person { personChar :: Char, personAge :: Int } deriving Show »> view $(field 'personChar) (Person a 10) a* »> over $(field 'personAge) (*2) (Person a 10) Person {personChar = a, personAge = 20} »> Laws1) Get-Put: You get back what you put in. view l (set l v s) "a v2) Put-Get4: Putting back what you got doesn't change anything. set l (view l s) s "a s3) Put-Put: Setting is idempotent. set l v (set l v s) "a set l v sGet the a inside the s. Modify the a inside the s$, optionally changing the types to b and t.Set the a inside the s#, optionally changing the types to b and t.Make a lens from a field name. Example: over $(field 'foo) (*2) Could use  DeriveFunctor here but that's not portable.   'basic-lens-0.0.2-C0iPQ4NlWvWDZegdD0PKnOControl.Lens.BasicLensviewoversetfield $fFunctorIdIdrunId