úÎIÊEæ5      !"#$%&'()*+,-./01234None 7Acyclic monad is used to lookup a member of the object ! with infinite-loop detection. The lens for accessing the  of the  . This means that memb is one of the member labels  of o. The ) of the member depends both on the label + and (the underlying types of) the object. o is an  if given its type information, ! there is an equivalence between o and the  . The 5 type within the table. The   within an  # that carries all the member data. The   type, where u3 carrying the information of its underlying types. "A utility function for defining a  . "A utility function for defining a  MemberLookup, with a default computation % for the case the member is missing.  Defining a  MemberLookup, without default. Given a pair of * label and a value, create the data field ( for the member and inserts the value.   member label generated lens  member label ,default accessor when the record is missing member accessor  member label member accessor ,default accessor when the record is missing  member label member accessor 6     6NoneUnderlying string types. Underlying integer types. The declaration of instance  obj , instance  obj means  that the obj is an   and is ready to tell the s which type to use  to represent the real numbers. 789789NoneObject  uses : for real numbers, ; for integers and <  for strings. Btypechecks :: (UnderlyingReal (Object Precise) ~ Rational) => BoolTrueDtypechecks :: (UnderlyingInteger (Object Precise) ~ Integer) => BoolTrueJtypechecks :: (UnderlyingString (Object Precise) ~ Data.Text.Text) => BoolTrueObject  uses : for real numbers, ; for integers and <  for strings. <typechecks :: (UnderlyingReal (Object DIT) ~ Double) => BoolTrue<typechecks :: (UnderlyingInteger (Object DIT) ~ Int) => BoolTrueFtypechecks :: (UnderlyingString (Object DIT) ~ Data.Text.Text) => BoolTrue=>?@AB=>?@ABNoneAn empty object.    None ,2, unless given explicitly, is defined in terms of ) and * . !If the +& field is missing, we re-calculate it  from the ) and *. #DTo define a member with compound types like vector of real numbers,  we use  to C ask the object which real value it prefers, then put the response  into the type constructors. .We also give a fallback accessor here. If the *1 field is missing, we attempt to re-calculate it  from the ) and +. Here is how we can do that. %&Now, let us introduce the concepts of %, #,  ! and ". Any such concepts are described  in terms of  labels. ':First, let us create a tiny two-dimensional vector class.  We make it an instance of C to use them later for tests. )Now we define the lenses. -BWe can write functions that would construct a point particle from L its mass and velocity. And we can make the function polymorphic over the : representation of the real numbers the objects prefer. .,We can also construct a point particle from  its mass and momentum. /AWe define an instance of point-like particle. And again, we can B keep it polymorphic, so that anyone can choose its concrete type > later, according to their purpose. Thus we will achieve the B polymorphic encoding of the knowledge of this world, in Haskell. *(laserBeam :: Object DIT) ^? kineticEnergy Just 1631.25.(laserBeam :: Object Precise) ^? kineticEnergyJust (6525 % 4)DMoreover, we can ask Ichiro to sign the ball. Usually, we needed to 5 create a new data-type to add a new field. But with  'dynamic-object'/ we can do so without changing the type of the 7 ball. So, we can put our precious, one-of-a-kind ball A into toybox together with less uncommon balls, and with various A other toys. And still, we can safely access the contents of the H toybox without runtime errors, and e.g. see which toy is the heaviest. Plet (mySpecialBall :: Object DIT) = laserBeam & insert Autograph "Ichiro Suzuki"'let toybox = [laserBeam, mySpecialBall]=let toybox2 = toybox ++ [duck, lens, banana, envelope, ghost]#maximum $ mapMaybe (^?mass) toybox25.2DE !"#$%&'()*+,-./01234FGHIJK !"#$%&'()*+,-./01234'(%&#$!" )*+,-./01234DE !"#$%&'()*+,-./01234FGHIJKL      !"##$$%%&&''()*+,-./0123456789:;<=;<>?@ABCDEFGHIJKKLMNOPQRdynamic-object-0.2.1Data.Object.Dynamic.TypeData.Object.Dynamic.UnderlyingData.Object.Dynamic.PresetsData.Object.Dynamic*Data.Object.Dynamic.Examples.PointParticleAcyclic MemberLensMemberValType memberLens memberLookup ObjectivetabletableMapTableMapTableunTableObjectunObject mkMemberLensmkMemberLookupDefmkMemberLookupinsertits acyclically UseStringUnderlyingString UseIntegerUnderlyingIntegerUseRealUnderlyingRealPreciseDITempty KineticEnergyMomentumVelocityMassVecmassvelocitymomentum kineticEnergyfromMassVelocityfromMassMomentum laserBeamducklensbananaenvelopeghostcontainers-0.5.0.0 Data.Map.BaseMap$fObjectiveObject$fUseStringObject$fUseIntegerObject$fUseRealObjectghc-prim GHC.TypesDoubleInt text-0.11.2.3Data.Text.InternalText$fUseStringPrecise$fUseIntegerPrecise$fUseRealPrecise$fUseStringDIT$fUseIntegerDIT $fUseRealDITQuickCheck-2.5.1.1Test.QuickCheck.Arbitrary Arbitrary Autograph$fMemberoAutograph$fMemberoKineticEnergy$fMemberoMomentum$fMemberoVelocity $fMemberoMass$fArbitraryVec