diff options
author | Julien Dessaux | 2023-07-18 00:02:33 +0200 |
---|---|---|
committer | Julien Dessaux | 2023-07-18 00:02:33 +0200 |
commit | 4af96da5670566c111fa5c7dac9572eaac021a4b (patch) | |
tree | 74ae00fb63e087437bc3a62152d4b7fecf8c039e /haskell/src/SpaceTraders.hs | |
parent | [haskell] Trigger a program restart when the api client encounters a server r... (diff) | |
download | spacetraders-4af96da5670566c111fa5c7dac9572eaac021a4b.tar.gz spacetraders-4af96da5670566c111fa5c7dac9572eaac021a4b.tar.bz2 spacetraders-4af96da5670566c111fa5c7dac9572eaac021a4b.zip |
[haskell] Refactored everything with a ReaderT pattern
Diffstat (limited to '')
-rw-r--r-- | haskell/src/SpaceTraders.hs | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/haskell/src/SpaceTraders.hs b/haskell/src/SpaceTraders.hs index d93116d..2a531fe 100644 --- a/haskell/src/SpaceTraders.hs +++ b/haskell/src/SpaceTraders.hs @@ -3,21 +3,36 @@ module SpaceTraders ( SpaceTradersT , runSpaceTradersT - , Config(..) + , Env(..) + , HasDatabaseConn + , HasRequest , ask + , getConn + , getRequest , liftIO ) where import Control.Monad.IO.Class -import Control.Monad.Trans.Reader +import Control.Monad.Reader import qualified Database.SQLite.Simple as S -import qualified Data.Text as T +import Network.HTTP.Simple -type SpaceTradersT a = ReaderT Config IO a +type SpaceTradersT a = ReaderT Env IO a -runSpaceTradersT :: SpaceTradersT a -> Config -> IO a +runSpaceTradersT :: SpaceTradersT a -> Env -> IO a runSpaceTradersT = runReaderT -data Config = Config { conn :: S.Connection - , token :: T.Text - } +data Env = Env { envConn :: S.Connection + , envRequest :: Request } + +class HasDatabaseConn a where + getConn :: a -> S.Connection +instance HasDatabaseConn S.Connection where + getConn = id +instance HasDatabaseConn Env where + getConn = envConn + +class HasRequest a where + getRequest :: a -> Request +instance HasRequest Env where + getRequest = envRequest |