{-# OPTIONS_HADDOCK not-home #-}

{-|
Support for building command-line programs, ranging from simple tools to
long-running daemons.

This is intended to be used directly:

@
import "Core.Program"
@

the submodules are mostly there to group documentation.
-}
-- actually, they're there to group implementation too, but hey.
module Core.Program
    (
        {-* Executing a program -}
{-|
A top-level Program type giving you unified access to logging, concurrency,
and more.
-}
        module Core.Program.Execute
      , module Core.Program.Unlift
      , module Core.Program.Metadata

        {-* Command-line argument parsing -}
{-|
Including declaring what options your program accepts, generating help, and
for more complex cases [sub]commands, mandatory arguments, and environment
variable handling.
-}
      , module Core.Program.Arguments
        {-* Logging facilities -}
{-|
Facilities for noting events through your program and doing debugging.
-}
      , module Core.Program.Logging

{-|
There are a few common use cases which require a bit of wrapping to use
effectively. Watching files for changes and taking action in the event of a
change is one.
-}
      , module Core.Program.Notify
    ) where

import Core.Program.Arguments
import Core.Program.Execute
import Core.Program.Logging
import Core.Program.Metadata
import Core.Program.Notify
import Core.Program.Unlift