MyNixOS website logo
Description

Wiring, promotion and demotion of types.

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.

Metadata

Version

0.5.1

Platforms (75)

    Darwin
    FreeBSD 13
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd13
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd13
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows