wiring: Wiring, promotion and demotion of types.
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
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.
Properties
Versions | 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, 0.5.1 |
---|---|
Change log | None available |
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:31Z |
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
Package maintainers
For package maintainers and hackage trustees