Wrapper overview

A Wrapper<F> is a function that can be used to wrap a function with stateful operations.

Example

import { log } from 'fp-ts/lib/Console'
import { IO, Apply } from 'fp-ts/lib/IO'
import { wrapT } from 'arena-fp-ts/Wrapper'

const sqr = (x: number) => x * x

// I create a wrapper for the type I want by passing in an Apply instance
const wrapper = wrapT(Apply)

// I want to run `sqr` between to operations contained in `IO<void>` types,
// so I need to lift `sqr` into an `IO<number>`.
const liftSqr: (x: number) => IO<number> = (x) => () => sqr(x)

const wrappedFn = wrapper(log('About to call sqr'), liftSqr(5), log('Finished sqr'))

assert.deepStrictEqual(wrappedFn(), 25) // log messages sent to console

Added in v0.0.1


Table of contents


model

Wrapper (interface)

Signature

export interface Wrapper<F> {
  <A>(prolog: HKT<F, any>, ma: HKT<F, A>): HKT<F, A>
  <A>(prolog: HKT<F, any>, ma: HKT<F, A>, epolog: HKT<F, any>): HKT<F, A>
}

Added in v0.0.1

Wrapper1 (interface)

Signature

export interface Wrapper1<F extends URIS> {
  <A>(prolog: Kind<F, any>, ma: Kind<F, A>): Kind<F, A>
  <A>(prolog: Kind<F, any>, ma: Kind<F, A>, epolog: Kind<F, any>): Kind<F, A>
}

Added in v0.0.1

Wrapper2 (interface)

Signature

export interface Wrapper2<F extends URIS2> {
  <E, A>(prolog: Kind2<F, E, any>, ma: Kind2<F, E, A>): Kind2<F, E, A>
  <E, A>(prolog: Kind2<F, E, any>, ma: Kind2<F, E, A>, epolog: Kind2<F, E, any>): Kind2<F, E, A>
}

Added in v0.0.1

Wrapper2C (interface)

Signature

export interface Wrapper2C<F extends URIS2, E> {
  <A>(prolog: Kind2<F, E, any>, ma: Kind2<F, E, A>): Kind2<F, E, A>
  <A>(prolog: Kind2<F, E, any>, ma: Kind2<F, E, A>, epolog: Kind2<F, E, any>): Kind2<F, E, A>
}

Added in v0.0.1

Wrapper3 (interface)

Signature

export interface Wrapper3<F extends URIS3> {
  <R, E, A>(prolog: Kind3<F, R, E, any>, ma: Kind3<F, R, E, A>): Kind3<F, R, E, A>
  <R, E, A>(prolog: Kind3<F, R, E, any>, ma: Kind3<F, R, E, A>, epolog: Kind3<F, R, E, any>): Kind3<F, R, E, A>
}

Added in v0.0.1

Wrapper3C (interface)

Signature

export interface Wrapper3C<F extends URIS3, E> {
  <R, A>(prolog: Kind3<F, R, E, any>, ma: Kind3<F, R, E, A>): Kind3<F, R, E, A>
  <R, A>(prolog: Kind3<F, R, E, any>, ma: Kind3<F, R, E, A>, epolog: Kind3<F, R, E, any>): Kind3<F, R, E, A>
}

Added in v0.0.1

Wrapper4 (interface)

Signature

export interface Wrapper4<F extends URIS4> {
  <S, R, E, A>(prolog: Kind4<F, S, R, E, any>, ma: Kind4<F, S, R, E, A>): Kind4<F, S, R, E, A>
  <S, R, E, A>(prolog: Kind4<F, S, R, E, any>, ma: Kind4<F, S, R, E, A>, epolog: Kind4<F, S, R, E, any>): Kind4<
    F,
    S,
    R,
    E,
    A
  >
}

Added in v0.0.1

type lambdas

URI

Signature

export declare const URI: 'Wrapper'

Added in v0.0.1

URI (type alias)

Signature

export type URI = typeof URI

Added in v0.0.1

utils

wrapT

Signature

export declare function wrapT<F extends URIS4>(F: Apply4<F>): Wrapper4<F>
export declare function wrapT<F extends URIS3>(F: Apply3<F>): Wrapper3<F>
export declare function wrapT<F extends URIS3, E>(F: Apply3C<F, E>): Wrapper3C<F, E>
export declare function wrapT<F extends URIS2>(F: Apply2<F>): Wrapper2<F>
export declare function wrapT<F extends URIS2, E>(F: Apply2C<F, E>): Wrapper2C<F, E>
export declare function wrapT<F extends URIS>(F: Apply1<F>): Wrapper1<F>
export declare function wrapT<F extends URIS>(F: Apply<F>): Wrapper<F>

Added in v0.0.1