componentm-devel-0.0.0.2: Easy REPL driven development using ComponentM
Safe HaskellNone
LanguageHaskell2010

Control.Monad.Component.Development

Synopsis

Making ComponentM values useful

data ComponentM a #

Represents the construction of a Component in your application, components may be composed using a Monad or Applicative interface.

Instances

Instances details
MonadIO ComponentM 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

liftIO :: IO a -> ComponentM a #

MonadThrow ComponentM 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

throwM :: (HasCallStack, Exception e) => e -> ComponentM a #

Applicative ComponentM 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

pure :: a -> ComponentM a #

(<*>) :: ComponentM (a -> b) -> ComponentM a -> ComponentM b #

liftA2 :: (a -> b -> c) -> ComponentM a -> ComponentM b -> ComponentM c #

(*>) :: ComponentM a -> ComponentM b -> ComponentM b #

(<*) :: ComponentM a -> ComponentM b -> ComponentM a #

Functor ComponentM 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

fmap :: (a -> b) -> ComponentM a -> ComponentM b #

(<$) :: a -> ComponentM b -> ComponentM a #

Monad ComponentM 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

(>>=) :: ComponentM a -> (a -> ComponentM b) -> ComponentM b #

(>>) :: ComponentM a -> ComponentM b -> ComponentM b #

return :: a -> ComponentM a #

runComponentDevel Source #

Arguments

:: (ComponentEvent -> IO ())

Callback function to trace ComponentEvent records

-> Text

Name of your application (used for tracing purposes)

-> ComponentM a

Builder of your application environment

-> (a -> IO b)

Function where your main application will live, note this function must block the thread as how the normal main would

-> IO () 

Similar to runComponentM1, when running for the first time, it creates an application in the REPL environment, subsequent invocations will teardown the and build up the application again.

All ComponentM characteristics are driven by this particular use-case given:

  • It will print out the time spent on initialization and teardown
  • It guarantees that teardown operations are as robust as possible
  • It documents your application components to pin-point quickly errors in your reloading logic

Error Records

data ComponentError #

Exception thrown by the runComponentM family of functions

Constructors

ComponentRuntimeFailed

Failure raised when the Application Callback given to a runComponentM function throws an exception

Fields

ComponentBuildFailed

Failure raised when execution of ComponentM throws an exception

Fields

Instances

Instances details
Exception ComponentError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Generic ComponentError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Associated Types

type Rep ComponentError 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep ComponentError = D1 ('MetaData "ComponentError" "Control.Monad.Component.Internal.Types" "componentm-0.0.0.2-BZFJ24rceAqJ02yPf1bZcE" 'False) (C1 ('MetaCons "ComponentRuntimeFailed" 'PrefixI 'True) (S1 ('MetaSel ('Just "componentErrorOriginalException") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException) :*: S1 ('MetaSel ('Just "componentErrorTeardownResult") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TeardownResult)) :+: C1 ('MetaCons "ComponentBuildFailed" 'PrefixI 'True) (S1 ('MetaSel ('Just "componentErrorBuildErrors") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [ComponentBuildError]) :*: S1 ('MetaSel ('Just "componentErrorTeardownResult") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TeardownResult)))
Show ComponentError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Pretty ComponentError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

pretty :: ComponentError -> Doc ann #

prettyList :: [ComponentError] -> Doc ann #

type Rep ComponentError 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep ComponentError = D1 ('MetaData "ComponentError" "Control.Monad.Component.Internal.Types" "componentm-0.0.0.2-BZFJ24rceAqJ02yPf1bZcE" 'False) (C1 ('MetaCons "ComponentRuntimeFailed" 'PrefixI 'True) (S1 ('MetaSel ('Just "componentErrorOriginalException") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException) :*: S1 ('MetaSel ('Just "componentErrorTeardownResult") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TeardownResult)) :+: C1 ('MetaCons "ComponentBuildFailed" 'PrefixI 'True) (S1 ('MetaSel ('Just "componentErrorBuildErrors") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [ComponentBuildError]) :*: S1 ('MetaSel ('Just "componentErrorTeardownResult") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 TeardownResult)))

data ComponentBuildError #

Exception raised on the execution of IO sub-routines used when constructing ComponentM values (e.g. buildComponent)

Constructors

DuplicatedComponentKeyDetected !Description

Failure thrown when using the same component key on a Component composition

ComponentAllocationFailed !Description !SomeException

Failure thrown when the allocation sub-routine of a Component fails with an exception

ComponentErrorThrown !SomeException

Failure thrown when calling the throwM when composing ComponentM values

ComponentIOLiftFailed !SomeException

Failure thrown when calling liftIO fails with an exception

Instances

Instances details
Exception ComponentBuildError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Generic ComponentBuildError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Associated Types

type Rep ComponentBuildError 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep ComponentBuildError = D1 ('MetaData "ComponentBuildError" "Control.Monad.Component.Internal.Types" "componentm-0.0.0.2-BZFJ24rceAqJ02yPf1bZcE" 'False) ((C1 ('MetaCons "DuplicatedComponentKeyDetected" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Description)) :+: C1 ('MetaCons "ComponentAllocationFailed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Description) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException))) :+: (C1 ('MetaCons "ComponentErrorThrown" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException)) :+: C1 ('MetaCons "ComponentIOLiftFailed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException))))
Show ComponentBuildError 
Instance details

Defined in Control.Monad.Component.Internal.Types

Pretty ComponentBuildError 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep ComponentBuildError 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep ComponentBuildError = D1 ('MetaData "ComponentBuildError" "Control.Monad.Component.Internal.Types" "componentm-0.0.0.2-BZFJ24rceAqJ02yPf1bZcE" 'False) ((C1 ('MetaCons "DuplicatedComponentKeyDetected" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Description)) :+: C1 ('MetaCons "ComponentAllocationFailed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Description) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException))) :+: (C1 ('MetaCons "ComponentErrorThrown" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException)) :+: C1 ('MetaCons "ComponentIOLiftFailed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SomeException))))

ComponentM tracing accessors

data ComponentEvent #

An event record used to trace the execution of an application initialization and teardown

data Build #

Contains metadata about the build of a resource from a ComponentM value

Instances

Instances details
Generic Build 
Instance details

Defined in Control.Monad.Component.Internal.Types

Associated Types

type Rep Build 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep Build = D1 ('MetaData "Build" "Control.Monad.Component.Internal.Types" "componentm-0.0.0.2-BZFJ24rceAqJ02yPf1bZcE" 'False) (C1 ('MetaCons "Build" 'PrefixI 'True) ((S1 ('MetaSel ('Just "componentDesc") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Description) :*: S1 ('MetaSel ('Just "componentTeardown") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Teardown)) :*: (S1 ('MetaSel ('Just "buildElapsedTime") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 NominalDiffTime) :*: (S1 ('MetaSel ('Just "buildFailure") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe SomeException)) :*: S1 ('MetaSel ('Just "buildDependencies") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Set Description))))))

Methods

from :: Build -> Rep Build x #

to :: Rep Build x -> Build #

Pretty Build 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

pretty :: Build -> Doc ann #

prettyList :: [Build] -> Doc ann #

Display Build 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep Build 
Instance details

Defined in Control.Monad.Component.Internal.Types

type Rep Build = D1 ('MetaData "Build" "Control.Monad.Component.Internal.Types" "componentm-0.0.0.2-BZFJ24rceAqJ02yPf1bZcE" 'False) (C1 ('MetaCons "Build" 'PrefixI 'True) ((S1 ('MetaSel ('Just "componentDesc") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Description) :*: S1 ('MetaSel ('Just "componentTeardown") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Teardown)) :*: (S1 ('MetaSel ('Just "buildElapsedTime") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 NominalDiffTime) :*: (S1 ('MetaSel ('Just "buildFailure") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Maybe SomeException)) :*: S1 ('MetaSel ('Just "buildDependencies") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Set Description))))))

buildElapsedTime :: Build -> NominalDiffTime #

Elasped time in the allocation of a component resource

buildFailure :: Build -> Maybe SomeException #

Error thrown in the allocation of a component resource

data BuildResult #

Wraps a collection of Build records

Instances

Instances details
Pretty BuildResult 
Instance details

Defined in Control.Monad.Component.Internal.Types

Methods

pretty :: BuildResult -> Doc ann #

prettyList :: [BuildResult] -> Doc ann #

Display BuildResult 
Instance details

Defined in Control.Monad.Component.Internal.Types