! r#I      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H None&',-/178=>?@AHMSUVX_fk(  !"#$%&'(   !"#$%&'None&',-/178=>?@AHMSUVX_fkS:vesselDisperse is a simplified version of View for ordinary containers. This is used as a stepping stone to obtain the View instance for MapV.:<;:<;None&',-/178=>?@AHMSUVX_fk>: LvesselA type v= supports EmptyView iff it is able to contain no information.NvesselOur containers are parameterised by a choice of functor to apply at the leaves of their structure. By applying them to Identity, we obtain ordinary containers for data, called "views". By applying them to Proxy, we obtain what are effectively blank forms to be filled in, called "queries" or "view selectors". By using a functor such as Map k, information about many queries or their results may be aggregated together into a single container.This class codifies the operations we need to be able to perform on these container types in order to transpose various Map-like structures into and out of them.DThis is done for the purposes of, on the one hand collecting many users' view selectors into a single aggregated selector containing information about who is interested in each part (condenseV), and on the other hand, taking the resulting aggregated views and splitting them into a Map of views for each user (disperseV).It also specifies the cropV operation which restricts a view to a particular selection, as well as operations for mapping functions over all the leaves of the container.OvesselTranspose a sufficiently-Map-like structure into a container, effectively aggregating many structures into a single one containing information about which keys each part of it came from originally.PvesselYTranspose a sufficiently-Map-like structure out of a container, the inverse of condenseV.QvesselGiven a structure specifying a query, and a structure representing a view of data, restrict the view to only those parts which satisfy the query. (Essentially intersection of Maps.)RvesselsWe also want a way to determine if the container is empty, because shipping empty containers around is a bad idea.SvesselnMap a natural transformation over all the leaves of a container, changing the functor which has been applied.Tvessel(Traverse over the leaves of a container.Uvessel9Map over all the leaves of a container, keeping only the I results and returing J if no leaves are kept.VvesselnMap over all the leaves of two containers, combining the leaves with the provided function, keeping only the I results and returing J if no leaves are kept.Wvessel[Map over all the leaves of two containers, combining the leaves with the provided function^vesselKA main point of the View class is to be able to produce this QueryMorphism.jvessela completely empty view.#>?@ABCDEFGHIJKLMNWVUTSRQPOXYZ[\]^_`#NWVUTSRQPOLMXJKIGHFDECABY@>?Z[\]^_`None&',-/178=>?@AHMSUVX_fkDu{vessel5A more convenient type to use for extracting results.|vesselLBuild a query given a suitable value for specifying what we're asking for. p0 will typically be Proxy or Const SelectedCount.}vessel<From a view, extract a more convenient type of value to use.z}|{z}|{None&',-/178=>?@AHMSUVX_fkF~vessel7A functor-indexed container corrresponding to DMap k v.~~None&',-./178=>?@AHMSUVX_fkqIvesselKquery for two things simultaneously, return as much result as is available.None&',-/178=>?@AHMSUVX_fkU%vesselThis type is a container for storing an arbitrary collection of functor-parametric container types of the sort discussed above, keyed by a GADT whose index will specify which sort of container goes in each position.Ordinary types with values have kind * Functors have kind * -> * Containers taking a functor as a parameter then have kind (* -> *) -> * The keys of a vessel are indexed by a functor-parametric container type, so they have kind ((* -> *) -> *) -> * Vessel itself, for any such key type, produces a functor-parametric container, so it has kind (((* -> *) -> *) -> *) -> (* -> *) -> * Law: None of the items in the Vessel's MonoidalDMap are nullVNone&',-/178=>?@AHMSUVX_fk`vesselcSomething between MapV and Vessel, where the keys are simple values, but the values are full views.TODO: this representation has the advantage that all of it's instances come "free", but the mostly "right" representation is probably ... Vessel v (Compose (MonoidalMap k) f)vessel|the instance for Filterable (MonoidalMap k) is not defined anyplace conveninent, this sidesteps it for this particular case.vesselFA gadget to "traverse" over all of the keys in a SubVessel in one stepvesselwA gadget to "traverse" over all of the keys in a SubVessel, aligned to the keys nested inside a deeper Map, in one step None&',-/178=>?@AHMSUVX_fkeCvessel8A functor-indexed container for a single deletable item.vessel%A gadget to "traverse" over a SingleVvessel<Non-existentialized mapV; since the contained value is known None&',-/178=>?@AHMSUVX_fkj vessel5A functor-indexed container corresponding to Map k v.vessel5Match whatever's present in the View, insert nothing.vesselAA gadget to "traverse" over all of the keys in a MapV in one stepvessel<Non-existentialized mapV; since the contained value is known   None&',-/178=>?@AHMSUVX_fko3vesselYA functor-indexed container corresponding to Identity. (i.e. a single non-deletable item):vessel(A gadget to "traverse" over an IdentityV;vessel;Non-existentialized map; since the contained value is known 3456789:; 3456789:; None-HpIKLMNOPQRSTUVWX :;<LMNOPQRSTUVW[\]^_z{|}~ 345;NOPQRSTUVWLMz{|}345 ~\_][ ^:;<Y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                     ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 6 7 8 9 : ; < = > ? @ A B C D E F G H I JKLMKLNKOPKOPKOQKRSKRSKRTKUVKUVKUWKXYKXZKXZKX[KX[\vessel-0.2.0.0-inplaceData.Vessel.InternalData.Vessel.DisperseData.Vessel.ClassData.Vessel.SelectableData.Vessel.DependentMapData.Vessel.ViewMorphismData.Vessel.VesselData.Vessel.SubVesselData.Vessel.SingleData.Vessel.MapData.Vessel.Identity Data.VesselPivotDNoneDOneDSplitDPivotNoneOneSplitDTheseDThisDThatVSum:~>FlipApunFlipAp assocLCompose assocRComposealignWithKeyMaybeDMapalignWithKeyDMap dtheseToThese theseToDTheseunalignProperly findPivotunionDistinctAscsplitLT condenseD' findPivotDunionDistinctAscDsplitLTDalignWithKeyMonoidalDMapalignWithKeyMaybeMonoidalDMapsplitD splitOneD curryMMap uncurryMMap leftOuterJoinleftOuterJoin'leftOuterJoin_$fGroupCompose$fAdditiveCompose$fMonoidCompose$fSemigroupCompose$fAdditiveMonoidalDMap$fGroupMonoidalDMap$fAdditiveFlipAp $fGroupFlipAp$fMonoidFlipAp$fSemigroupFlipAp$fFromJSONVSum $fToJSONVSum $fEqFlipAp $fOrdFlipAp $fShowFlipAp $fEqPivot $fOrdPivot $fShowPivotDispersedispersecondense$fDisperseMonoidalMapZipViewzipViewMGZipViewMapViewmapViewMGMapView DisperseView disperseView GDisperseView CondenseView condenseView GCondenseViewEmpty1empty EmptyViewemptyVView condenseV disperseVcropVnullVmapV traverseV mapMaybeValignWithMaybeV alignWithVmaybeEmptyViewmapViewzipView collapseNullV subtractV alignWithMV transposeViewmapDecomposedVfilterV $fEmpty1k:*: $fEmpty1kM1 $fEmpty1kU1$fCondenseViewkt:*::*:$fCondenseViewktM1M1$fCondenseViewktU1U1$fDisperseViewkt:*::*:$fDisperseViewktM1M1$fDisperseViewktU1U1 $fViewProxy$fEmptyViewMonoidalDMap$fViewMonoidalDMap$fZipViewfgh:*::*::*:$fZipViewfghM1M1M1$fZipViewfghK1K1K1$fZipViewfghU1U1U1$fZipViewfghV1V1V1$fMapViewfg:*::*:$fMapViewfgM1M1$fMapViewfgK1K1$fMapViewfgU1U1$fMapViewfgV1V1$fDisperseViewktK1K1$fCondenseViewktK1K1 $fEmpty1kK1 Selectable Selectionselector selectionDMapVunDMapV$fSelectableDMapVSet$fEmptyViewDMapV $fViewDMapV$fFromJSONDMapV $fToJSONDMapV$fGenericDMapV $fShowDMapV$fAdditiveDMapV $fGroupDMapV $fMonoidDMapV$fSemigroupDMapV $fOrdDMapV $fEqDMapVViewMorphismSimple ViewMorphism_viewMorphism_to_viewMorphism_fromViewHalfMorphism_viewMorphism_mapQuery_viewMorphism_mapQueryResultViewQueryResultzipViewMorphismtoZipViewMorphismfromZipViewMorphismqueryViewMorphism$fMonoidViewHalfMorphism$fSemigroupViewHalfMorphism$fCategoryTYPEViewHalfMorphism$fMonoidViewMorphism$fSemigroupViewMorphism$fCategoryTYPEViewMorphismVesselLeafWrapperVesselunVesseltoListV fromListVintersectionMaybeWithKeyVtraverseWithKeyVtraverseWithKeyV_buildVintersectionWithKeyV singletonVlookupVmapMaybeWithKeyVintersectionDMapMaybeWithKey condenseV'unionDistinctAscVsplitV splitOneVsplitLTVvesseltoVessel fromVesselfilterNullFlipAps$fEmptyViewVessel $fViewVessel$fAdditiveVessel $fGroupVessel$fMonoidVessel$fSemigroupVessel$fFromJSONVessel$fToJSONVessel $fQueryVessel$fQueryVessel0$fQueryVessel1$fGenericVessel $fShowVessel $fEqVessel SubVessel unSubVessel SubVesselKey getSubVessel mkSubVesseltraverseSubVesselsingletonSubVessellookupSubVesselsubVesselFromKeys subVessel toSubVessel fromSubVesselsubVesselWildcardtoSubVesselWildcardfromSubVesselWildcard subVessels toSubVesselsfromSubVesselsmapMaybeWithKeySubVesseluncurrySubVesselcurrySubVessel condenseVMMaphandleSubVesselSelectorhandleSubSubVesselSelector$fGCompare->SubVesselKey$fGEq->SubVesselKey$fArgDict->cSubVesselKey$fToJSONSubVesselKey$fFromJSONSome$fGShow->SubVesselKey$fEmptyViewSubVessel$fQuerySubVessel$fQuerySubVessel0$fQuerySubVessel1$fViewSubVessel$fFromJSONSubVessel$fToJSONSubVessel$fSemigroupSubVessel$fMonoidSubVessel$fGenericSubVessel$fGroupSubVessel$fAdditiveSubVessel $fEqSubVessel$fShowSubVessel$fShowSubVesselKeySingleV unSingleV lookupSingleVsingleV toSingleV fromSingleVhandleSingleVSelector mapSingleV$fSelectableSingleV() $fViewSingleV$fAdditiveSingleV$fGroupSingleV$fMonoidSingleV$fSemigroupSingleV$fGenericSingleV$fFromJSONSingleV$fToJSONSingleV $fReadSingleV $fShowSingleV $fOrdSingleV $fEqSingleVMapVunMapV singletonMapV lookupMapV mapVMorphismtoMapVMorphismfromMapVMorphismmapVSetMorphismtoMapVSetMorphismfromMapVSetMorphismmapVWildcardMorphismtoMapVWildcardMorphismfromMapVWildcardMorphismhandleMapVSelectormapMapWithKeyV$fSelectableMapVIdentity$fSelectableMapVSet$fEmptyViewMapV $fViewMapV$fAdditiveMapV $fGroupMapV $fMonoidMapV$fSemigroupMapV$fAdditiveMapV0 $fGroupMapV0 $fMonoidMapV0$fSemigroupMapV0$fEqMapV $fOrdMapV $fShowMapV $fReadMapV $fGenericMapV$fFromJSONMapV $fToJSONMapV$fSemigroupMapV1 $fMonoidMapV1$fSemigroupMapV2 IdentityV unIdentityVlookupIdentityV identityV toIdentityV fromIdentityVhandleIdentityVSelector mapIdentityV$fSelectableIdentityV()$fViewIdentityV $fEqIdentityV$fOrdIdentityV$fShowIdentityV$fReadIdentityV$fSemigroupIdentityV$fMonoidIdentityV$fGroupIdentityV$fAdditiveIdentityV$fGenericIdentityV$fToJSONIdentityV$fFromJSONIdentityVbase GHC.MaybeJustNothingData.Functor.ComposeCompose getComposeData.Functor.IdentityIdentity runIdentityData.Functor.ConstConstgetConst Data.Proxy asProxyTypeOfProxyKProxy