diff options
author | William Carroll <wpcarro@gmail.com> | 2020-08-09T21·17+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-08-09T21·17+0100 |
commit | bbcd0bf27d2663a9673983ccf6e2cf7034ddf240 (patch) | |
tree | 18c6fa980ffce4a598e4889ea56510fd2f21495f /website/sandbox/learnpianochords/src/server/Types.hs | |
parent | 7d85ba559dd50e0552abccb45d1cf5766ebcb541 (diff) |
Replace Prelude with RIO
I believe RIO stands for: "ReaderT <something-something> IO", which is a nod to the top-level application data type: ```haskell -- This is a simplification newtype RIO env a = RIO { runRIO :: ReaderT env a () } ``` I read about RIO from an FP-Complete blog post a few months ago, and now I'm excited to try it out for a real project. Bon voyage!
Diffstat (limited to 'website/sandbox/learnpianochords/src/server/Types.hs')
-rw-r--r-- | website/sandbox/learnpianochords/src/server/Types.hs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/website/sandbox/learnpianochords/src/server/Types.hs b/website/sandbox/learnpianochords/src/server/Types.hs index 5b8ca036dd0b..3a9decf39c19 100644 --- a/website/sandbox/learnpianochords/src/server/Types.hs +++ b/website/sandbox/learnpianochords/src/server/Types.hs @@ -1,12 +1,30 @@ -------------------------------------------------------------------------------- module Types where -------------------------------------------------------------------------------- +import RIO import Data.Aeson -import Data.Text +import System.Envy (FromEnv, fromEnv, env) -------------------------------------------------------------------------------- +-- | Read from .envrc +data Env = Env + { envGoogleClientID :: !String + } deriving (Eq, Show) + +instance FromEnv Env where + fromEnv _ = do + envGoogleClientID <- env "GOOGLE_CLIENT_ID" + pure Env {..} + +-- | Application context: a combination of Env and additional values. +data Context = Context + { contextGoogleClientID :: !String + , contextServerPort :: !Int + , contextClientPort :: !Int + } + data VerifyGoogleSignInRequest = VerifyGoogleSignInRequest - { idToken :: Text + { idToken :: !Text } deriving (Eq, Show) instance FromJSON VerifyGoogleSignInRequest where |