diff options
Diffstat (limited to 'server/src/Model/Query.hs')
| -rw-r--r-- | server/src/Model/Query.hs | 32 | 
1 files changed, 32 insertions, 0 deletions
diff --git a/server/src/Model/Query.hs b/server/src/Model/Query.hs new file mode 100644 index 0000000..d15fb5f --- /dev/null +++ b/server/src/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  | 
