-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | A stream DSL for writing embedded C programs.
--   
--   Copilot is a stream-based runtime verification framework implemented
--   as an embedded domain-specific language (EDSL) in Haskell. Programs
--   can be interpreted for testing, or translated into C99 code to be
--   incorporated in a project, or as a standalone application. The C99
--   backend output is constant in memory and time, making it suitable for
--   systems with hard realtime requirements.
--   
--   This package is the main entry-point for using Copilot.
--   
--   A tutorial, examples, and other information are available at
--   https://copilot-language.github.io.
@package copilot
@version 4.7.1

-- | Create Copilot executables that generate code or interpret streams and
--   print the results to stdout.
module Language.Copilot.Main

-- | Create a main to either compile or interpret a copilot specification.
--   
--   This function must be provided an auxiliary function capable of
--   compiling Copilot Core specifications for some target.
--   
--   The command line program supports four main commands:
--   
--   
--   
- --output/-o: use the given compiler to produce C
--   code.
--   
- --justrun/-c: execute a dry-run, which parses and
--   converts the specification to core but does not produce any
--   output.
--   
- --print/-p: pretty print the specification.
--   
- --interpret/-i NUM: interpret the specification for a
--   given number of steps.
--   
copilotMain :: Interpreter -> Printer -> Compiler -> Spec -> IO ()

-- | Create a main function with a default interpreter and pretty printer.
--   
--   This function must be provided an auxiliary function capable of
--   compiling Copilot Core specifications for some target.
--   
--   This function relies on copilotMain, please refer to that
--   function for the command line options.
defaultMain :: Compiler -> Spec -> IO ()

-- | Copilot is a stream-based runtime verification framework. Programs can
--   be interpreted for testing, or translated into C99 code to be
--   incorporated in a project, or as a standalone application. The C99
--   backend output is constant in memory and time, making it suitable for
--   systems with hard realtime requirements.
--   
--   This module is the main entry point for the Copilot language. The
--   expectation is that most Copilot users will only need to import this
--   module, together with one of the backend modules (at present, only
--   C99 from the copilot-c99 library is available).
module Language.Copilot

-- | Create a main to either compile or interpret a copilot specification.
--   
--   This function must be provided an auxiliary function capable of
--   compiling Copilot Core specifications for some target.
--   
--   The command line program supports four main commands:
--   
--   
--   
- --output/-o: use the given compiler to produce C
--   code.
--   
- --justrun/-c: execute a dry-run, which parses and
--   converts the specification to core but does not produce any
--   output.
--   
- --print/-p: pretty print the specification.
--   
- --interpret/-i NUM: interpret the specification for a
--   given number of steps.
--   
copilotMain :: Interpreter -> Printer -> Compiler -> Spec -> IO ()

-- | Create a main function with a default interpreter and pretty printer.
--   
--   This function must be provided an auxiliary function capable of
--   compiling Copilot Core specifications for some target.
--   
--   This function relies on copilotMain, please refer to that
--   function for the command line options.
defaultMain :: Compiler -> Spec -> IO ()
