úÎ!•:‰ÄĮ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆNone gĮapecs7Generate tuple instances for the following tuple sizes.ĮČNone+0;<=>?FKQTV>ģapecs9Stores that we can request a list of member entities for. apecs+Returns an unboxed vector of member indices apecs+Stores that components can be removed from. apecs)Destroys the component for a given index. apecsStores that can be written. apecs Writes a component to the store.apecsStores that we can read using explGet and  explExists. For some entity e,  eplGet s e" is only guaranteed to be safe if explExists s e returns True.apecs‚Reads a component from the store. What happens if the component does not exist is left undefined, and might not necessarily crash.apecs9Returns whether there is a component for the given index.apecsIndicates that the store s6 can be initialized. Generally, "base" stores like Map c/ can be initialized, but composite stores like  MaybeStore s cannot.apecsInitialize a new empty store.apecs/The type of components stored by a store, e.g. Elem (Map c) = c.apecs Has w m c means that world w can produce a  Storage c.apecs‚A component is defined by specifying how it is stored. The constraint ensures that stores and components are mapped one-to-one.apecs6A SystemT is a newtype around `ReaderT w IO a`, where w7 is the game world variable. Systems mainly serve to$Lift side effects into the IO Monad.7Allow type-based lookup of a component's store through getStore.apecsWAn Entity is just an integer, used to index into a component store. In general, use  newEntity, cmap<, and component tags instead of manipulating these directly.}For performance reasons, negative values like (-1) are reserved for stores to represent special values, so avoid using these.apecsIdentity component/store.  Identity c is equivalent to c , so using it is mostly useless.0apecs/Pseudostore used to produce components of type . Always returns True for  explExists*, and echoes back the entity argument for explGet. Used in e.g. cmap $ (a, ety :: Entity) -> b to access the current entity.4apecs,Pseudocomponent that functions normally for  explExists and  explMembers, but always return Filter for explGet. Can be used in cmap as  cmap $ (Filter :: Filter a) -> b6. Since the above can be written more consicely as cmap $ (_ :: a) -> bT, it is rarely directly. More interestingly, we can define reusable filters like 0movables = Filter :: Filter (Position, Velocity).6apecs Used for Ér, a logical disjunction between two components. As expected, Either is used to model error values. Getting an  Either a b will first attempt to get a b and return it as Right b", or if it does not exist, get an a as Left a-. Can also be used to set one of two things.8apecs+Pseudostore used to produce values of type Maybe a. Will always return True for  explExists7. Writing can both set and delete a component using Just and Nothing respectively.:apecs+Pseudostore used to produce values of type Not a , inverts  explExists, and destroys instead of explSet.<apecs*Psuedocomponent indicating the absence of a. Mainly used as e.g. cmap $ (a, Not b) -> c" to iterate over entities with an a but no b1. Can also be used to delete components, like cmap $ a -> (Not :: Not a) to delete every a component.) 0123456789:;<=)  <=:;8967452301None ;<=>?VjkVēƒapecsRun a system with a game world„apecsRun a system with a game world†apecsÖWrites a component to a given entity. Will overwrite existing components. The type was originally 'Entity c -> c -> SystemT w m ()', but is relaxed to 'Entity e' so you don't always have to write 'set . cast'‡apecs/Returns whether the given entity has component c Note that cQ is a phantom argument, used only to convey the type of the entity to be queried.ˆapecs)Maps a function over all entities with a cx, and writes their cy.‰apecs Conditional cmapx, that first tests whether the argument satisfies some property. The entity needs to have both a cx and cp component.Šapecs-Monadically iterates over all entites with a cx, and writes their cy.‹apecs-Monadically iterates over all entites with a cxŒapecs'Fold over the game world; for example, cfold max (minBound :: Foo) will find the maximum value of Foo. Strict in the accumulator.apecsCMonadically fold over the game world. Strict in the accumulator.ŽapecsCMonadically fold over the game world. Strict in the accumulator.apecsGet all components c . Call as  [(c,Entity)] to also read the entity index.apecsDestroys component c" for the given entity. Note that cS is a phantom argument, used only to convey the type of the entity to be destroyed.‘apecs Applies a function, if possible.’apecs%Counts the number of entities with a cƒ„…†‡ˆ‰Š‹ŒŽ‘’ƒ„…†‡ˆ‰Š‹ŒŽ‘’None-;<=>?FTV]ijklC”apecsūA cache around another store. Caches store their members in a fixed-size vector, so operations run in O(1). Caches can provide huge performance boosts, especially for large numbers of components. The cache size is given as a type-level argument.ūNote that iterating over a cache is linear in cache size, so sparsely populated caches might actually decrease performance. In general, the exact size of the cache does not matter as long as it reasonably approximates the number of components present.tThe cache uses entity (-2) to internally represent missing entities, so be wary when manually manipulating entities.•apecsmAn empty type class indicating that the store behaves like a regular map, and can therefore safely be cached.–apecsAA Global contains exactly one component. The initial value is Ę from the component's Ë instance.qWhen operating on a global, any entity arguments are ignored. For example, we can get a global component with get 0 or get 1 or even  get undefined.—apecsA Unique contains zero or one component. Writing to it overwrites both the previous component and its owner. Its main purpose is to be a Map8 optimized for when only ever one component inhabits it.˜apecsA map based on Data.IntMap.Strict . O(log(n)) for most operations.“”•–—˜™˜”—–•“™None;<=>?FKTVjkŸ ŗapecsuComponent used by newEntity to track the number of issued entities. Automatically added to any world created with  makeWorldļapecsbConvenience entity, for use in places where the entity value does not matter, i.e. a global store.ˇapecs,Bumps the EntityCounter and yields its value¸apecshWrites the given components to a new entity, and yields that entity. The return value is often ignored.šapecs'Explicitly invoke the garbage collectorēapecs“Quantize turns a world-space coordinate into a table-space coordinate by dividing by the given cell size and rounding towards negative infinity.ģapecs|Turns a table-space vector into an integral index, given some table size vector. Yields Nothing for out-of-bounds queriesŧapecsRTests whether a vector is in the region given by 0 and the size vector (inclusive)ŊapecsœFor two table-space vectors indicating a region's bounds, gives a list of the vectors contained between them. This is useful for querying a spatial hash.žapecs6flatten, but yields garbage for out-of-bounds vectors.ēapecsQuantization cell sizeapecsVector to be quantizedŊapecsLower bound for the regionapecsHigher bound for the region ŗ´ĩšēģŧŊž šļŗ´ĩˇ¸ēģŧŊžNone‡îÄapecsSame as Æ , but has no ŗÅapecs7Same as makeWorld, but also makes a component instance:Æapecs 7makeWorld "WorldName" [''Component1, ''Component2, ...] turns into ˙>data WorldName = WorldName Component1 Component2 ... EntityCounter instance WorldName `Has` Component1 where ... instance WorldName `Has` Component2 where ... ... instance WorldName `Has` EntityCounter where ... initWorldName :: IO WorldName initWorldName = WorldName <$> initStore <*> initStore <*> ... <*> initStore|ÄÅÆÆÄÅNoneˆ<3ĖÍÎĪĐ<=ƒ„…†‡ˆŠ‹ŒŽ‘”–—˜ŗļ¸šÅÆ.<=˜—–”…†ˆŠ‹ŒŽ‘‡ƒ„šŗ¸ļÆÅŅ  !"#$%&''())*+,-./0123456789:;<<==>>??@@AABBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐĪŅŌĶŌÔŌÔŌÕŌÕÖ$apecs-0.5.1.0-A66ofbv9XGT81CGuW2yfV5Apecs Apecs.Core Apecs.System Apecs.Stores Apecs.UtilApecs.THApecs.THTuplesbaseControl.Monad.IO.ClassliftIOtransformers-0.5.5.0Control.Monad.Trans.Classlift mtl-2.2.2Control.Monad.Reader.ClassasksaskDestroyMembersSetGet ExplMembers explMembers ExplDestroy explDestroyExplSetexplSetExplGetexplGet explExistsExplInitexplInitElemHasgetStore ComponentStorageSystemSystemTunSystemEntityunEntity$fComponentIdentity$fHaswmIdentity$fExplGetmIdentity$fExplSetmIdentity$fExplDestroymIdentity$fExplMembersmIdentity $fNumEntity $fEqEntity $fOrdEntity $fShowEntity $fEnumEntity$fFunctorSystemT$fMonadSystemT$fApplicativeSystemT$fMonadTransSystemT$fMonadIOSystemT$fMonadReaderSystemT EntityStore FilterStoreFilter EitherStore MaybeStoreNotStoreNot$fExplDestroym() $fExplSetm() $fExplGetm() $fComponent() $fHaswm()$fExplMembersm(,,,,,,,)$fExplDestroym(,,,,,,,)$fExplSetm(,,,,,,,)$fExplGetm(,,,,,,,)$fHaswm(,,,,,,,)$fComponent(,,,,,,,)$fExplMembersm(,,,,,,)$fExplDestroym(,,,,,,)$fExplSetm(,,,,,,)$fExplGetm(,,,,,,)$fHaswm(,,,,,,)$fComponent(,,,,,,)$fExplMembersm(,,,,,)$fExplDestroym(,,,,,)$fExplSetm(,,,,,)$fExplGetm(,,,,,)$fHaswm(,,,,,)$fComponent(,,,,,)$fExplMembersm(,,,,)$fExplDestroym(,,,,)$fExplSetm(,,,,)$fExplGetm(,,,,) $fHaswm(,,,,)$fComponent(,,,,)$fExplMembersm(,,,)$fExplDestroym(,,,)$fExplSetm(,,,)$fExplGetm(,,,) $fHaswm(,,,)$fComponent(,,,)$fExplMembersm(,,)$fExplDestroym(,,)$fExplSetm(,,)$fExplGetm(,,) $fHaswm(,,)$fComponent(,,)$fExplMembersm(,)$fExplDestroym(,) $fExplSetm(,) $fExplGetm(,) $fHaswm(,)$fComponent(,)$fExplSetmNotStore$fExplGetmNotStore $fHaswmNot$fComponentNot$fExplSetmMaybeStore$fExplGetmMaybeStore $fHaswmMaybe$fComponentMaybe$fExplDestroymEitherStore$fExplSetmEitherStore$fExplGetmEitherStore $fHaswmEither$fComponentEither$fExplMembersmFilterStore$fExplGetmFilterStore $fHaswmFilter$fComponentFilter$fExplGetmEntityStore $fHaswmEntity$fComponentEntity $fEqFilter $fShowFilter runSystemrunWithgetsetexistscmapcmapIfcmapMcmapM_cfoldcfoldMcfoldM_getAlldestroymodifycountRegisterCacheCachableGlobalUniqueMap regLookup$fExplMembersIOMap$fExplDestroyIOMap$fExplSetIOMap$fExplGetIOMap$fExplInitIOMap$fExplMembersIOUnique$fExplDestroyIOUnique$fExplSetIOUnique$fExplGetIOUnique$fExplInitIOUnique$fExplSetIOGlobal$fExplGetIOGlobal$fExplInitIOGlobal $fCachableMap$fExplMembersIOCache$fExplDestroyIOCache$fExplSetIOCache$fExplGetIOCache$fExplInitIOCache$fCachableCache$fExplMembersmRegister$fExplDestroyIORegister$fExplSetIORegister$fExplGetmRegister$fExplInitIORegister EntityCounter getCounterglobal nextEntity newEntityrunGCquantizeflatteninboundsregionflatten'$fComponentEntityCounter$fSemigroupEntityCounter$fMonoidEntityCounter$fEqEntityCounter$fShowEntityCounter makeWorldNoECmakeWorldAndComponents makeWorld makeInstancestupleInstances Data.EitherEitherGHC.BasememptyMonoid Data.Proxy asProxyTypeOfProxyKProxy