)k%    NoneCNs-: The summary semigroup for the journal data.f4: The finalized summary associated with a datablock.d*: The user's datatype stored in the arena. ?Convert the user's data to an instance of the summary semigroup Removal of data only used for the merge operation or determining fullness, changing the summary to a version used purely for the datablock indexing.0Determine if we've reached a datablock boundary.FThe location on the filesystem in which we store the data and journal.QThe list of datablocks, seen as their summary and accessors, for read operations.(The journal for writing new data, in an G so we can lock it for consistency when doing writes or data access.LThe current datablock generation, starting from zero and strictly monotonic.3The journal file, opened and positioned for writingBThe current summary, if any values have been stored in the journal7The values currently held in the journal on disk, in a e (instead of a list) to improve GC performance, and provide fast snoc to avoid the use of reverse.'The amount of data stored in the frame.A hash of the data stored in the frame so we can detect write corruption. This is sufficient for the entire frame as all other elements are fixed size and directly impact the data's hash.The user's serialized data.:The base directory for the arena files to be stored under.LSetup the directory structure for Arena. This is performed implicitly by  .  Launch an W, using the given summarizing, finalizing, and block policy functions, at the given .NB: Two -s must not be run concurrently with a shared 4. Data loss from the journal is likely to result. !Access an atomic snapshot of the  as a list of summaries and accessors for their associated data. One datablock is the journal, and thus does not satisfy the block policy.The returned IO actions in the list provide access to a state consistent with the time when the list of accessors was returned, but do not hold more then the journal at that time's contents in memory. (Durably insert a piece of data into the ;. This funtion returns after the data is sync'd to disk.F !"#$% &'()*+,-./0123456789:;<=> ?@ABCDEF G    + !"#$% &'()*+,-./0123456789:;<=> ?@ABCDEF GH       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJarena_HdH9fTYg43SJXQAX0DxuiYDatabase.ArenaArenaArenaTArenaDB ArenaLocationgetArenaLocation runArenaTrunArena initArena startArena accessDataaddData adSummarize adFinalize adArenaFulladArenaLocation adDataRefadCurrentJournalbaseGHC.MVarMVar ojArenaIDojHandle ojSummaryojValspersi_0XNwfXZL46w8b5UA43iaozData.Vector.PersistentVectorjLengthjHashjDataTheFiles theJournalDir theDataDirtheTempJournaltheJournalFile theDataFiletheDataSummaryFileunArenaT OpenJournalOJ JournalFrameJF JournalHashArenaID mkJournal readDataFile syncHandle withFileSync summarizefinalize journalDirdataDir tempJournal journalFiledataFiledataSummaryFile journalDir'dataDir' tempJournal' journalFile' dataFile'dataSummaryFile'theFilesreadJournalFile cleanJournal readArenaIDs internArenasregenerateSummaryinternArenaFile readDataFile' readAllData$fSerialJournalFrame