{-# OPTIONS_HADDOCK not-home #-}

-- actually, they're there to group implementation too, but hey.

-- |
-- 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.
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