wiring: Wiring, promotion and demotion of types.

[ bsd3, data, library ] [ Propose Tags ] [ Report a vulnerability ]

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.

Downloads

Maintainer's Corner

Package maintainers

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 5901 total (2 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]