The wiring package

[ Tags: 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

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
Dependencies base (>=4.7 && <4.10), mtl, template-haskell (>=2.7 && <2.12), transformers [details]
License BSD3
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 repository head: git clone git://github.com/seanparsons/wiring.git
Uploaded Thu Oct 27 10:59:06 UTC 2016 by seanparsons
Distributions NixOS:0.5.0
Downloads 812 total (10 in the last 30 days)
Rating 0.0 (0 ratings) [clear rating]
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2016-10-30 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees