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.

[maintain] [Publish]

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]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees