wiring
Version 0.4.1 revision 0 uploaded by seanparsons.
Package meta
- Synopsis
- Wiring, promotion and demotion of types.
- Description
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 theWirable
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 takinga
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
andwiredTell
functions.- Author
- Sean Parsons
- Bug reports
- http://github.com/seanparsons/wiring/issues
- Category
- Data
- Copyright
- n/a
- Homepage
- http://github.com/seanparsons/wiring/
- Maintainer
- git@futurenotfound.com
- Package URL
- n/a
- Stability
- provisional