    {-# LANGUAGE Safe #-}

    -- |
    -- Description: Intermediate representation for Copilot specifications.
    -- Copyright:   (c) 2011 National Institute of Aerospace / Galois, Inc.
    --
    -- The following articles might also be useful:
    --
    -- * Carette, Jacques and Kiselyov, Oleg and Shan, Chung-chieh,
    -- \"/Finally tagless, partially evaluated: Tagless staged/
    -- /interpreters for simpler typed languages/\",
    -- Journal of Functional Programming vol. 19, p. 509-543, 2009.
    --
    -- * Guillemette, Louis-Julien and Monnier, Stefan,
    -- \"/Type-Safe Code Transformations in Haskell/\",
    -- Electronic Notes in Theoretical Computer Science vol. 174, p. 23-39, 2007.
    --
    -- For examples of how to traverse a Copilot specification see
    -- the source code of the interpreter (@copilot-interpreter@)
    -- and the pretty-printer (@copilot-prettyprinter@).
    module Copilot.Core
        ( module Copilot.Core.Expr
        , module Copilot.Core.Operators
        , module Copilot.Core.Spec
        , module Copilot.Core.Type
        , module Copilot.Core.Type.Array
        , module Data.Int
        , module Data.Word
        )
      where

    -- External imports
    import Data.Int
    import Data.Word

    -- Internal imports
    import Copilot.Core.Expr
    import Copilot.Core.Operators
    import Copilot.Core.Spec
    import Copilot.Core.Type
    import Copilot.Core.Type.Array