data-has: Simple extensible product

[ bsd3, data, library ] [ Propose Tags ]

Simple extensible product

[Skip to Readme]
Versions [faq],,,,
Change log CHANGELOG
Dependencies base (>=4.8 && <5) [details]
License BSD-3-Clause
Author winterland1989
Category Data
Home page
Source repo head: git clone git://
Uploaded by winterland at 2020-12-01T05:41:58Z
Distributions LTSHaskell:, NixOS:, Stackage:
Downloads 3731 total (100 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2020-12-01 [all 1 reports]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for data-has-

[back to package description]


Hackage Build Status

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 ...