K%BG      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF Safe-Inferred2468HMGHIJKLMNOPQRSTUVWGHIJKLMNOPQRSTGHIJKLMNOPQRSTUVWPT Safe-Inferred3=HKM!TODO$RefClasss with inherent equivalence.EqRefSimple r a === 6RefReaderSimple r (exist b . Eq b => (Lens' b a, r b))As a reference, (m :: EqRefSimple r a) behaves as  join $ liftM (uncurry lensMap) mXTODO$Reference with inherent equivalence.TODOMonad for dynamic actionsTODO(Lazy monadic evaluation. In case of y <- memoRead x , invoking y will invoke x at most once.Laws:(memoRead x >> return ()) ===  return ()(memoRead x >>= id) === x$(memoRead x >>= y -> liftM2 (,) y y) === liftM (a -> (a, a)) y&(memoRead x >>= y -> liftM3 (,) y y y) === liftM (a -> (a, a, a)) y...HMonad for reference creation. Reference creation is not a method of the #V type class to make possible to create the same type of references in multiple monads.2For basic usage examples, look into the source of Data.LensRef.Test.CReference creation by extending the state of an existing reference. Suppose that r is a reference and k is a lens.Law 1: extRef applies k on r$ backwards, i.e. the result of (extRef r k a0) should behaves exactly as  (lensMap k r).*(liftM (k .) $ extRef r k a0) = return rLaw 2: extRef does not change the value of r:*(extRef r k a0 >> readRef r) = readRef r=Law 3: Proper initialization of newly defined reference with a0:8(extRef r k a0 >>= readRef) = (readRef r >>= set k a0)newRef extends the state s in an independent way.newRef === extRef unitRef unitedTODO writeRef r ===  liftRefWriter . writeRefSimple rTODOTODOTODOTODO7Base reference associated to the reference reader monadreadRef === liftRefReader . readRefSimple IReference wrapped into a RefReaderSimple monad. See the documentation of #.!/There are two associated types of a reference, $ and !B which determines each-other. This is implemented by putting only $ into the # class and adding a  RefWriterOf data family outside of #. RefWriterOfG is hidden from the documentation because you never need it explicitly.#QType class for references which can be joined and on which lenses can be applied.The join operation is Y from  Control.Monad: If ((r :: RefReaderSimple r (RefSimple r a)) then (join r :: RefSimple r a):. This is possible because reference operations work with (RefReaderSimple r (r a)) instead of just (r a)$. For more compact type signatures, (RefReaderSimple r (r a)) is called (RefSimple r a).$"Associated reference reader monad.(RefReaderSimple m) is ismoroprhic to (Reader x) for some x+. Laws which ensures this isomorphism ((r :: RefReaderSimple m a) is arbitrary):r >> return () = return ())liftM2 (,) r r = liftM (\a -> (a, a)) r See also Yhttp://stackoverflow.com/questions/16123588/what-is-this-special-functor-structure-called%unit reference&Apply a lens on a reference.'Reference read.(Reference write.)TODO* modRef r f === readRef r >>= writeRef r . f+ hasEffect r f returns False iff  (modRef m f) ===  (return ()). hasEffect is correct only if toEqRefW is applied on a pure reference (a reference which is a pure lens on the hidden state). hasEffect; makes defining auto-sensitive buttons easier, for example., EqRefSimple construction.-TODO.An  EqRefSimple7 is a normal reference if we forget about the equality. fromEqRef m ===  join $ liftM (uncurry lensMap) m3XZ  !"#$%&'()*+,-.[\/  !"#$%&'()*+,-./#%&$'( "!  *)+,.-XZ   !"#%&$'()*+,-.[\&None!"*234:=BHKM/0123456789:;<=>?@ /0123456789:;89:567@2341/0?>=<; /0123456789:;<=>?@None!"*234:=BHKM']A^_`abcdefghijklmBnopCqrstuvwxyz{|}~ABCABC ]A^_`abcdefgjklmBnopCqrstuvwxyz{|}~hiNone *234:=BHKM(DEFDEFDEFDEF      !"#$%&'()*+,-./01234567889::;<=>?@ABCDEFGEFGHIJKLMNOPQRSTUVWXYZ[\Y]^_E`abccdeefghijklmnopqrstuvwxyz{|}~_beelmno|} lensref-0.2 Data.LensRefData.LensRef.CommonData.LensRef.PureData.LensRef.FastControl.Lens.SimpleEqRef EqRefSimple EqRefClassvalueIsChangingRegionStatusChangeUnblockBlockKill MonadRegisterEffectMModifieronChangeonChangeSimpleonRegionStatusChange liftEffectMliftToModifierregisterCallback MonadMemomemoReadMonadRefCreatorextRefnewRefMonadRefWriter liftRefWriterwriteRefRef RefWriter RefReaderMonadRefReaderBaseRef liftRefReaderreadRef RefSimpleRefWriterSimple RefWriterOfRefClassRefReaderSimpleunitReflensMap readRefSimplewriteRefSimplepostponeModificationmodRef hasEffecttoEqRefnewEqRef fromEqRefNewRefnewRef'SRefMorphrunMorph MonadMonoidrunMonadMonoid RefWriterT runRefWriterTtell' memoRead_$fNewRefReaderT$fNewRefWriterT$fNewRefStateT $fNewRefIO$fMonoidMonadMonoidRegister runRegisterrunTestsField2_2Field1_1Lens'Lenslenssetunited^.view.=magnify<&>$fField2(,,,)(,,,)bb'$fField2(,)(,)bb'$fField1(,)(,)aa' EqRefCorebase Control.Monadjoin$fRefClassEqRefCore$fEqRefClassEqRefCoreSLSt unRegisterRegRef Register_CCLStLens_unLens_RefWriterOfReaderTrunRefWriterOfReaderTrunLens_initLSt evalRegister' evalRegister runRegister_ onChangeAcctoSend$fMonadRegisterRegister$fMonadRefWriterRegister$fMonadMemoRegister$fMonadRefCreatorRegister$fMonadRefReaderRegister$fMonadFixRegister$fMonadTransRegister$fMonadRefWriterStateT$fMonadMemoStateT$fMonadRefCreatorStateT$fMonadRefReaderStateT$fRefClassLens_$fMonadRefWriterRefWriterOf$fMonadRefReaderRefWriterOf$fMonadRefReaderReaderTTFCo:R:RefWriterOfReaderTaRegunRegLens__readPart writePartregisterWrapunWrap RefWriterOfIOrunRefWriterOfIOjoinLens$fMonadRegisterReg$fMonadRefWriterReg$fMonadMemoReg$fMonadRefCreatorReg$fMonadRefReaderReg $fMonadFixReg$fMonadRefWriterWrap$fMonadMemoWrap$fMonadRefCreatorWrap$fMonadRefReaderWrap$fRefClassLens__TFCo:R:RefWriterOfWrapa$fMonadTransWrap $fNewRefWrap