Created
June 21, 2024 15:03
-
-
Save chrisdone-artificial/4a4c0f55e87941c727f8e8dae99b765d to your computer and use it in GitHub Desktop.
Wire-up / registry
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# language TemplateHaskell #-} | |
import Brossa.Prelude | |
import TH | |
import Things | |
main :: IO () | |
main = $(wire 'app) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# language TemplateHaskell #-} | |
module TH where | |
import Prelude | |
import Language.Haskell.TH | |
wire :: Name -> Q Exp | |
wire n = do | |
i <- reify n | |
varE n |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Things where | |
import Brossa.Prelude | |
import Data.Aeson (Value) | |
data ValueStore m = ValueStore { | |
store :: Text -> Value -> m (), | |
retrieve :: Text -> m (Maybe Value) | |
} | |
data Logger m = Logger { | |
log :: Text -> m () | |
} | |
data Sql m = Sql { | |
query :: Text -> m [Value] | |
} | |
valueStore :: Monad m => Sql m -> Logger m -> ValueStore m | |
valueStore sql logger = ValueStore { | |
store = \_text _value -> do logger.log "storing..." | |
void (sql.query "foo"), | |
retrieve = \key -> fmap listToMaybe (sql.query key) | |
} | |
app :: ValueStore m -> IO () | |
app _ = pure () |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment