{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-|
Module      : Control.Teardown
Description : Build composable, idempotent & transparent application cleanup sub-routines
Copyright   : (c) Roman Gonzalez, 2017
License     : MIT
Maintainer  : romanandreg@gmail.com
Stability   : experimental

Provides functions that help on the creation of Application teardown
sub-routines
-}
module Control.Teardown
  ( ITeardown
  -- * Cleanup main type and function
  , Teardown
  , teardown

  -- * Functions to create a 'Teardown' record
  , emptyTeardown
  , newTeardown
  , newDynTeardown
  , concatTeardown

  -- * Functions to deal with results from 'teardown' call
  , TeardownResult (..)
  , didTeardownFail
  , failedToredownCount
  , toredownCount
  , renderTeardownReport
  ) where

import Control.Teardown.Internal.Core
    ( ITeardown
    , Teardown
    , teardown

    , emptyTeardown
    , newTeardown
    , newDynTeardown
    , concatTeardown

    , TeardownResult (..)
    , didTeardownFail
    , failedToredownCount
    , toredownCount
    )

import Control.Teardown.Internal.Printer (renderTeardownReport)