{-# 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
  (
  -- * Typeclasses for extending teardown functionality
    ITeardown
  , IResource

  -- * Cleanup main type and function
  , Teardown
  , TeardownResult (..)
  , teardown

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

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

import Control.Teardown.Internal.Types
    (IResource (..), ITeardown (..), Teardown, TeardownResult (..))

import Control.Teardown.Internal.Core
    (didTeardownFail, emptyTeardown, failedToredownCount, toredownCount)

import Control.Teardown.Internal.Printer (renderTeardownReport)