wiring: Wiring, promotion and demotion of types.
This package provides the ability to join up or wire instances of types (such as ReaderT, WriterT and RWST) with some semi-automatic conversions.
ReaderT Example
With ReaderT there might be two functions already written that we wish to compose:
userLookup :: Int -> ReaderT (Resource1, Database1) IO User ordersLookup :: Int -> ReaderT (Database2, Resource1) IO [String]
Ordinarily these could not be used together because their environment type differs, which reduces the utility of ReaderT as a method of dependency injection.
However with use of the wire method from the Wirable typeclass it becomes possible to use these two together with little pain.
composedLookup :: Int -> ReaderT (Resource1, Database1, Database2) IO String composedLookup userId = do user <- wire $ userLookup userId orders <- wire $ ordersLookup userId return $ describeOrders user orders
Tuples
Built in are instances of Wirable for transforming tuples to their individual fields, like taking a from a tuple (a, b, c).
As well as producing new tuples from existing tuples, starting with a tuple of (a, b, c) and returning a tuple of (c, a).
Other Types
WriterT and RWST are similarly well supported, including the ability to promote from ReaderT/WriterT up to RWST.
Some existing functionality is extended like for instance with the wiredAsk and wiredTell functions.
Modules
[Index] [Quick Jump]
- Control
- Monad
- RWS
- Reader
- State
- Trans
- RWS
- Reader
- State
- Writer
- Control.Monad.Wiring
- Writer
- Monad
Downloads
- wiring-0.5.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
| Versions [RSS] | 0.2.0.0, 0.2.0.1, 0.2.1, 0.3.0, 0.4.0, 0.4.1, 0.4.2, 0.5.0, 0.5.1 |
|---|---|
| Dependencies | base (>=4.9 && <4.12), mtl, template-haskell (>=2.7 && <2.14), transformers [details] |
| License | BSD-3-Clause |
| Author | Sean Parsons |
| Maintainer | git@futurenotfound.com |
| Category | Data |
| Home page | http://github.com/seanparsons/wiring/ |
| Bug tracker | http://github.com/seanparsons/wiring/issues |
| Source repo | head: git clone git://github.com/seanparsons/wiring.git |
| Uploaded | by seanparsons at 2018-08-11T23:59:54Z |
| Distributions | |
| Reverse Dependencies | 1 direct, 0 indirect [details] |
| Downloads | 6012 total (19 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating | |
| Status | Docs available [build log] Last success reported on 2018-08-12 [all 1 reports] |