wiring: Wiring, promotion and demotion of types.

[ bsd3, data, library ] [ Propose Tags ]

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


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.


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],, 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
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 5787 total (14 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]