module Database.Drasil.Dump where import Language.Drasil (UID, HasUID(..)) import Database.Drasil.ChunkDB (conceptinsTable, theoryModelTable, gendefTable, insmodelTable, dataDefnTable, unitTable, citationTable, UMap, ChunkDB(termTable, symbolTable)) import Data.Map.Strict (Map, insert) import qualified Data.Map.Strict as SM import Control.Lens ((^.)) type ChunkType = String type DumpedChunkDB = Map ChunkType [UID] umapDump :: HasUID a => UMap a -> [UID] umapDump :: forall a. HasUID a => UMap a -> [UID] umapDump = ((a, Int) -> UID) -> [(a, Int)] -> [UID] forall a b. (a -> b) -> [a] -> [b] map ((a -> Getting UID a UID -> UID forall s a. s -> Getting a s a -> a ^. Getting UID a UID forall c. HasUID c => Getter c UID Getter a UID uid) (a -> UID) -> ((a, Int) -> a) -> (a, Int) -> UID forall b c a. (b -> c) -> (a -> b) -> a -> c . (a, Int) -> a forall a b. (a, b) -> a fst) ([(a, Int)] -> [UID]) -> (UMap a -> [(a, Int)]) -> UMap a -> [UID] forall b c a. (b -> c) -> (a -> b) -> a -> c . UMap a -> [(a, Int)] forall k a. Map k a -> [a] SM.elems dumpChunkDB :: ChunkDB -> DumpedChunkDB dumpChunkDB :: ChunkDB -> Map ChunkType [UID] dumpChunkDB ChunkDB cdb = ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "symbols" (UMap QuantityDict -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap QuantityDict -> [UID]) -> UMap QuantityDict -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB -> UMap QuantityDict symbolTable ChunkDB cdb) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "terms" (UMap IdeaDict -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap IdeaDict -> [UID]) -> UMap IdeaDict -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB -> UMap IdeaDict termTable ChunkDB cdb) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "concepts" (UMap ConceptInstance -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap ConceptInstance -> [UID]) -> UMap ConceptInstance -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap ConceptInstance) ChunkDB (UMap ConceptInstance) -> UMap ConceptInstance forall s a. s -> Getting a s a -> a ^. Getting (UMap ConceptInstance) ChunkDB (UMap ConceptInstance) Lens' ChunkDB (UMap ConceptInstance) conceptinsTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "units" (UMap UnitDefn -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap UnitDefn -> [UID]) -> UMap UnitDefn -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap UnitDefn) ChunkDB (UMap UnitDefn) -> UMap UnitDefn forall s a. s -> Getting a s a -> a ^. Getting (UMap UnitDefn) ChunkDB (UMap UnitDefn) Lens' ChunkDB (UMap UnitDefn) unitTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "dataDefinitions" (UMap DataDefinition -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap DataDefinition -> [UID]) -> UMap DataDefinition -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap DataDefinition) ChunkDB (UMap DataDefinition) -> UMap DataDefinition forall s a. s -> Getting a s a -> a ^. Getting (UMap DataDefinition) ChunkDB (UMap DataDefinition) Lens' ChunkDB (UMap DataDefinition) dataDefnTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "instanceModels" (UMap InstanceModel -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap InstanceModel -> [UID]) -> UMap InstanceModel -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap InstanceModel) ChunkDB (UMap InstanceModel) -> UMap InstanceModel forall s a. s -> Getting a s a -> a ^. Getting (UMap InstanceModel) ChunkDB (UMap InstanceModel) Lens' ChunkDB (UMap InstanceModel) insmodelTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "generalDefinitions" (UMap GenDefn -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap GenDefn -> [UID]) -> UMap GenDefn -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap GenDefn) ChunkDB (UMap GenDefn) -> UMap GenDefn forall s a. s -> Getting a s a -> a ^. Getting (UMap GenDefn) ChunkDB (UMap GenDefn) Lens' ChunkDB (UMap GenDefn) gendefTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "theoryModels" (UMap TheoryModel -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap TheoryModel -> [UID]) -> UMap TheoryModel -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap TheoryModel) ChunkDB (UMap TheoryModel) -> UMap TheoryModel forall s a. s -> Getting a s a -> a ^. Getting (UMap TheoryModel) ChunkDB (UMap TheoryModel) Lens' ChunkDB (UMap TheoryModel) theoryModelTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "conceptInstances" (UMap ConceptInstance -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap ConceptInstance -> [UID]) -> UMap ConceptInstance -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap ConceptInstance) ChunkDB (UMap ConceptInstance) -> UMap ConceptInstance forall s a. s -> Getting a s a -> a ^. Getting (UMap ConceptInstance) ChunkDB (UMap ConceptInstance) Lens' ChunkDB (UMap ConceptInstance) conceptinsTable) (Map ChunkType [UID] -> Map ChunkType [UID]) -> Map ChunkType [UID] -> Map ChunkType [UID] forall a b. (a -> b) -> a -> b $ ChunkType -> [UID] -> Map ChunkType [UID] -> Map ChunkType [UID] forall k a. Ord k => k -> a -> Map k a -> Map k a insert ChunkType "citations" (UMap Citation -> [UID] forall a. HasUID a => UMap a -> [UID] umapDump (UMap Citation -> [UID]) -> UMap Citation -> [UID] forall a b. (a -> b) -> a -> b $ ChunkDB cdb ChunkDB -> Getting (UMap Citation) ChunkDB (UMap Citation) -> UMap Citation forall s a. s -> Getting a s a -> a ^. Getting (UMap Citation) ChunkDB (UMap Citation) Lens' ChunkDB (UMap Citation) citationTable) Map ChunkType [UID] forall a. Monoid a => a mempty