Copyright | (c) Roman Gonzalez 20172018 |
---|---|
License | MIT |
Maintainer | open-source@roman-gonzalez.info |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Provides functions that help on the creation of Application teardown sub-routines
Synopsis
- class HasTeardown teardown where
- getTeardown :: teardown -> Teardown
- class IResource resource
- data Teardown
- data TeardownResult
- = BranchResult {
- resultDescription :: !Description
- resultElapsedTime :: !NominalDiffTime
- resultDidFail :: !Bool
- resultListing :: ![TeardownResult]
- | LeafResult {
- resultDescription :: !Description
- resultElapsedTime :: !NominalDiffTime
- resultError :: !(Maybe SomeException)
- | EmptyResult {
- resultDescription :: !Description
- = BranchResult {
- runTeardown :: HasTeardown t => t -> IO TeardownResult
- runTeardown_ :: HasTeardown t => t -> IO ()
- emptyTeardown :: Description -> Teardown
- newTeardown :: IResource resource => Text -> resource -> IO Teardown
- didTeardownFail :: TeardownResult -> Bool
- failedToredownCount :: TeardownResult -> Int
- toredownCount :: TeardownResult -> Int
- prettyTeardownResult :: TeardownResult -> Doc ann
Typeclasses for extending teardown functionality
class HasTeardown teardown where Source #
A record that is or contains a Teardown
sub-routine should
instantiate this typeclass
getTeardown :: teardown -> Teardown Source #
Executes teardown sub-routine returning a TeardownResult
Instances
HasTeardown Teardown Source # | |
Defined in Control.Teardown.Internal.Core getTeardown :: Teardown -> Teardown Source # |
class IResource resource Source #
A resource or sub-routine that can be transformed into a Teardown
operation
Instances
IResource Teardown Source # | Wraps an existing Teardown record; the wrapper Teardown record represents a "parent resource" on the TeardownResult |
Defined in Control.Teardown.Internal.Core | |
(TypeError (Text "DEPRECATED: Execute a 'newTeardown' call per allocated resource") :: Constraint) => IResource [(Text, IO ())] Source # | Deprecated instance that creates a Teardown record from a list of cleanup sub-routines (creating a Teardown record for each). WARNING: This function assumes you are creating many sub-resources at once; this approach has a major risk of leaking resources, and that is why is deprecated; execute newTeardown for every resource you allocate. NOTE: The Since 0.4.1.0 |
Defined in Control.Teardown.Internal.Core | |
IResource [Teardown] Source # | Wraps a list of Teardown record; the new record will have one extra level
of description. Same behaviour as the |
Defined in Control.Teardown.Internal.Core | |
IResource (IO [Teardown]) Source # | Wraps an IO action that returns a list of Teardown record; the new record
will have one extra level of description. Same behaviour as the |
Defined in Control.Teardown.Internal.Core | |
IResource (IO [TeardownResult]) Source # | Creates a Teardown record from executing a sub-routine that releases
short-lived Teardown records. This is useful when short-lived Teardown
are accumulated on a collection inside a mutable variable (e.g. |
Defined in Control.Teardown.Internal.Core newTeardown :: Text -> IO [TeardownResult] -> IO Teardown Source # | |
IResource (IO ()) Source # | Creates a new Teardown record from a cleanup "IO ()" sub-routine; the Teardown API guarantees:
IMPORTANT: The |
Defined in Control.Teardown.Internal.Core |
Cleanup main type and function
Sub-routine that performs a resource cleanup operation
Instances
Generic Teardown Source # | |
NFData Teardown Source # | |
Defined in Control.Teardown.Internal.Types | |
IResource Teardown Source # | Wraps an existing Teardown record; the wrapper Teardown record represents a "parent resource" on the TeardownResult |
Defined in Control.Teardown.Internal.Core | |
HasTeardown Teardown Source # | |
Defined in Control.Teardown.Internal.Core getTeardown :: Teardown -> Teardown Source # | |
IResource [Teardown] Source # | Wraps a list of Teardown record; the new record will have one extra level
of description. Same behaviour as the |
Defined in Control.Teardown.Internal.Core | |
IResource (IO [Teardown]) Source # | Wraps an IO action that returns a list of Teardown record; the new record
will have one extra level of description. Same behaviour as the |
Defined in Control.Teardown.Internal.Core | |
type Rep Teardown Source # | |
Defined in Control.Teardown.Internal.Types type Rep Teardown = D1 (MetaData "Teardown" "Control.Teardown.Internal.Types" "teardown-0.5.0.1-CQOiJliN0tFL0A6mXwsGDY" True) (C1 (MetaCons "Teardown" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (IO TeardownResult)))) |
data TeardownResult Source #
Result from a Teardown
sub-routine
BranchResult | Result is composed by multiple teardown sub-routines |
| |
LeafResult | Result represents a single teardown sub-routine |
| |
EmptyResult | Represents a stub cleanup operation (for lifting pure values) |
|
Instances
runTeardown :: HasTeardown t => t -> IO TeardownResult Source #
Executes all composed Teardown sub-routines safely. This version returns a Tree data structure wich can be used to gather facts from the resource cleanup
runTeardown_ :: HasTeardown t => t -> IO () Source #
Executes all composed Teardown sub-routines safely
Functions to create a Teardown
record
emptyTeardown :: Description -> Teardown Source #
Creates a stub Teardown sub-routine, normally used when a contract expects a teardown return but there is no allocation being made
Functions to deal with results from teardown
call
didTeardownFail :: TeardownResult -> Bool Source #
Returns a boolean indicating if any of the cleanup sub-routine failed
failedToredownCount :: TeardownResult -> Int Source #
Returns number of sub-routines that threw an exception on execution of "runTeardown"
toredownCount :: TeardownResult -> Int Source #
Returns number of released resources from a "runTeardown" execution
prettyTeardownResult :: TeardownResult -> Doc ann Source #
Renders an ASCII Tree with the TeardownResult of a Teardown sub-routine execution