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.
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
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
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
|Versions [faq]||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]|
|Source repo||head: git clone git://github.com/seanparsons/wiring.git|
|Uploaded||by seanparsons at Sat Aug 11 23:59:54 UTC 2018|
|Downloads||3115 total (138 in the last 30 days)|
|Rating||(no votes yet) [estimated by rule of succession]|
Docs available [build log]
Last success reported on 2018-08-12 [all 1 reports]
For package maintainers and hackage trustees