úÎÂ     An  Accessor s a" is an object that encodes how to  get and put a subject of type a out of/into an object  of type s. 0In order for an instance of this data structure a to be  an Accessor#, it must obey the following laws:  getVal a (setVal a x s) = x  setVal a (getVal a s) s = s Accessor composition. +Accessor composition the other direction.  (<.) = flip (.>) An assignment operator for state monads.  (=:) = putA 4A structural dereference function for state monads. 3A structural assignment function for state monads. 5A structural modification function for state monads. deriveAccessors n where n is the name of a data type  declared with data' looks through all the declared fields > of the data type, and for each field ending in an underscore @ generates an accessor of the same name without the underscore. It is nameDeriveAccessors n f where f satisfies   f (s ++ "_") = Just s % f x = x -- otherwise "For example, given the data type:  & data Score = Score { p1Score_ :: Int & , p2Score_ :: Int & , rounds :: Int  } deriveAccessors& will generate the following objects:  p1Score :: Accessor Score Int : p1Score = Accessor p1Score_ (\x s -> s { p1Score_ = x })  p2Score :: Accessor Score Int : p2Score = Accessor p2Score_ (\x s -> s { p2Score_ = x }) nameDeriveAccessors n f where n is the name of a data type  declared with data and f$ is a function from names of fields A in that data type to the name of the corresponding accessor. If  f returns Nothing), then no accessor is generated for that  field.          data-accessor-0.0.1 Data.AccessorAccessorgetValsetVal.><.=:getAputAmodAderiveAccessorsnameDeriveAccessors