diff options
author | Joris | 2017-06-05 18:02:13 +0200 |
---|---|---|
committer | Joris | 2017-06-05 18:02:13 +0200 |
commit | 0b191f5c48edffc9da3e38c284e9640fd82e7cb1 (patch) | |
tree | c729e53822e7c41c1a854d82d25636e58ee65c9f /src/server/Model/Query.hs | |
parent | 5c110716cfda6e616a795edd12f2012b132dca9f (diff) | |
download | budget-0b191f5c48edffc9da3e38c284e9640fd82e7cb1.tar.gz budget-0b191f5c48edffc9da3e38c284e9640fd82e7cb1.tar.bz2 budget-0b191f5c48edffc9da3e38c284e9640fd82e7cb1.zip |
Replace persistent by sqlite-simple
Diffstat (limited to 'src/server/Model/Query.hs')
-rw-r--r-- | src/server/Model/Query.hs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/server/Model/Query.hs b/src/server/Model/Query.hs new file mode 100644 index 0000000..d15fb5f --- /dev/null +++ b/src/server/Model/Query.hs @@ -0,0 +1,32 @@ +module Model.Query + ( Query(..) + , run + ) where + +import Data.Functor (Functor) +import Database.SQLite.Simple (Connection) +import qualified Database.SQLite.Simple as SQLite + +data Query a = Query (Connection -> IO a) + +instance Functor Query where + fmap f (Query call) = Query (fmap f . call) + +instance Applicative Query where + pure x = Query (const $ return x) + (Query callF) <*> (Query callX) = Query (\conn -> do + x <- callX conn + f <- callF conn + return (f x)) + +instance Monad Query where + (Query callX) >>= f = Query (\conn -> do + x <- callX conn + case f x of Query callY -> callY conn) + +run :: Query a -> IO a +run (Query call) = do + conn <- SQLite.open "database" + result <- call conn + _ <- SQLite.close conn + return result |