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 | 5899 total (12 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] |