summaryrefslogtreecommitdiff
path: root/Hero/Keep.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Hero/Keep.hs')
-rw-r--r--Hero/Keep.hs109
1 files changed, 0 insertions, 109 deletions
diff --git a/Hero/Keep.hs b/Hero/Keep.hs
deleted file mode 100644
index 10ef732..0000000
--- a/Hero/Keep.hs
+++ /dev/null
@@ -1,109 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
-module Hero.Keep
- ( HeroKeep,
- GetComics (..),
- getComics,
- NewComic (..),
- newComic,
- open,
- close,
- )
-where
-
-import Alpha
-import Data.Acid (Update, makeAcidic)
-import qualified Data.Acid as Acid
-import Data.Data (Data, Typeable)
-import Data.IxSet (Indexable (..), IxSet, ixFun, ixSet)
-import qualified Data.IxSet as IxSet
-import Data.SafeCopy (base, deriveSafeCopy)
-import qualified Data.Text as Text
-import Hero.Core
-
--- * Keep
-
--- | Main database.
-data HeroKeep = HeroKeep
- { _comics :: IxSet Comic,
- _users :: IxSet User
- }
- deriving (Data, Typeable)
-
-$(deriveSafeCopy 0 'base ''HeroKeep)
-
--- * Index @Comic@
-
-$(deriveSafeCopy 0 'base ''Comic)
-
-$(deriveSafeCopy 0 'base ''User)
-
-$(deriveSafeCopy 0 'base ''ComicId)
-
-instance Indexable Comic where
- empty =
- ixSet
- [ ixFun <| \c -> [comicId c],
- ixFun <| \c -> [comicPages c],
- ixFun <| \c -> [comicName c],
- ixFun <| \c -> [comicIssue c],
- ixFun <| \c -> [comicDescription c]
- ]
-
-instance Indexable User where
- empty =
- ixSet
- [ ixFun <| \u -> [userEmail u],
- ixFun <| \u -> [userName u],
- ixFun <| \u -> [userLibrary u]
- ]
-
-newComic :: Comic -> Update HeroKeep Comic
-newComic c = do
- keep <- get
- put <| keep {_comics = IxSet.insert c (_comics keep)}
- pure c
-
-getComics :: Int -> Acid.Query HeroKeep [Comic]
-getComics n = ask /> _comics /> IxSet.toList /> take n
-
--- * Opening the keep
-
-$(makeAcidic ''HeroKeep ['newComic, 'getComics])
-
-initialHeroKeep :: HeroKeep
-initialHeroKeep =
- HeroKeep
- { _comics = IxSet.fromList [theRed],
- _users =
- IxSet.fromList
- [ User "a" "micheal" [],
- User "b" "ben" []
- ]
- }
- where
- theRed =
- Comic
- { comicId = "1",
- comicPages = 42,
- comicName = "The Red",
- comicIssue = "1.0",
- comicDescription =
- Text.unlines
- [ "In the future, a nuclear world war has changed the course",
- "of history forever. A single government entity now presides",
- "over what's left of the world, and prohibits certain content",
- "that is deemed emotionall dangerous, or \"red\", in attempt",
- "to maintain order and keep society working..."
- ]
- }
-
-open :: String -> IO (Acid.AcidState HeroKeep)
-open dir = Acid.openLocalStateFrom dir initialHeroKeep
-
-close :: Acid.AcidState HeroKeep -> IO ()
-close = Acid.closeAcidState