@hackage data-has0.2.1.0
Simple extensible product
Categories
License
BSD-3-Clause
Maintainer
winterland1989@gmail.com
Links
Versions
Installation
Dependencies (1)
Dependents (8)
@hackage/algolia, @hackage/tintin, @hackage/data-diverse-lens, @hackage/ipfs, @hackage/wgpu-hs, @hackage/magicbane, Show all…
data-has
A simple extensible product system, a typical usage is to free you from considering how to layer your monad stack, because your can now extend your monad in one layer:
{-# LANGUAGE FlexibleContexts #-}
-- in some library code
...
logInAnyReaderHasLogger :: (Has Logger r, MonadReader r m) => LogString -> m ()
logInAnyReaderHasLogger s = asks getter >>= logWithLogger s
queryInAnyReaderHasSQL :: (Has SqlBackEnd r, MonadReader r m) => Query -> m a
queryInAnyReaderHasSQL q = asks getter >>= queryWithSQL q
...
-- now you want to use these effects together
...
logger <- initLogger ...
sql <- initSqlBackEnd ...
(`runReader` (logger, sql)) $ do
...
logInAnyReaderHasLogger ...
...
x <- queryInAnyReaderHasSQL ...
...
...