summaryrefslogtreecommitdiff
path: root/haskell/src/SpaceTraders.hs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--haskell/src/SpaceTraders.hs20
1 files changed, 20 insertions, 0 deletions
diff --git a/haskell/src/SpaceTraders.hs b/haskell/src/SpaceTraders.hs
index 2a531fe..5bd7526 100644
--- a/haskell/src/SpaceTraders.hs
+++ b/haskell/src/SpaceTraders.hs
@@ -1,28 +1,46 @@
+{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE OverloadedStrings #-}
module SpaceTraders
( SpaceTradersT
+ , microSinceEpoch
+ , newEnv
, runSpaceTradersT
, Env(..)
, HasDatabaseConn
, HasRequest
, ask
, getConn
+ , getLastAPICall
, getRequest
, liftIO
) where
import Control.Monad.IO.Class
import Control.Monad.Reader
+import Data.IORef
+import Data.Time.Clock
+import Data.Time.Clock.POSIX
import qualified Database.SQLite.Simple as S
import Network.HTTP.Simple
type SpaceTradersT a = ReaderT Env IO a
+newEnv :: S.Connection -> Request -> IO Env
+newEnv conn req = do
+ r <- newIORef 0
+ return $ Env conn r req
+
runSpaceTradersT :: SpaceTradersT a -> Env -> IO a
runSpaceTradersT = runReaderT
+microSinceEpoch :: IO Integer
+microSinceEpoch = do
+ t <- getCurrentTime
+ return $ floor . (1e6 *) . nominalDiffTimeToSeconds $ utcTimeToPOSIXSeconds t
+
data Env = Env { envConn :: S.Connection
+ , envLastAPICall :: IORef Integer
, envRequest :: Request }
class HasDatabaseConn a where
@@ -33,6 +51,8 @@ instance HasDatabaseConn Env where
getConn = envConn
class HasRequest a where
+ getLastAPICall :: a -> IORef Integer
getRequest :: a -> Request
instance HasRequest Env where
+ getLastAPICall = envLastAPICall
getRequest = envRequest