-- 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
--   <a>https://copilot-language.github.io</a>.
@package copilot
@version 4.5.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 <a>Copilot Core</a> specifications for some target.
--   
--   The command line program supports four main commands:
--   
--   <ul>
--   <li><tt>--output/-o</tt>: use the given compiler to produce C
--   code.</li>
--   <li><tt>--justrun/-c</tt>: execute a dry-run, which parses and
--   converts the specification to core but does not produce any
--   output.</li>
--   <li><tt>--print/-p</tt>: pretty print the specification.</li>
--   <li><tt>--interpret/-i NUM</tt>: interpret the specification for a
--   given number of steps.</li>
--   </ul>
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 <a>Copilot Core</a> specifications for some target.
--   
--   This function relies on <a>copilotMain</a>, 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
--   <a>C99</a> from the <a>copilot-c99</a> library is available).
module Language.Copilot
array :: forall (n :: Nat) t. KnownNat n => [t] -> Array n t
label :: Typed a => String -> Stream a -> Stream a
(.) :: (b -> c) -> (a -> b) -> a -> c
type Spec = Writer [SpecItem] ()
interpret :: Integer -> Spec -> IO ()
class Functor f => Applicative (f :: Type -> Type)
pure :: Applicative f => a -> f a
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
(*>) :: Applicative f => f a -> f b -> f b
(<*) :: Applicative f => f a -> f b -> f a
class Semigroup a
(<>) :: Semigroup a => a -> a -> a
class Num a
(+) :: Num a => a -> a -> a
(-) :: Num a => a -> a -> a
(*) :: Num a => a -> a -> a
negate :: Num a => a -> a
abs :: Num a => a -> a
signum :: Num a => a -> a
fromInteger :: Num a => Integer -> a
class Applicative m => Monad (m :: Type -> Type)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
(>>) :: Monad m => m a -> m b -> m b
return :: Monad m => a -> m a
data Integer
data IO a
type FilePath = String
type String = [Char]
data Bool
False :: Bool
True :: Bool
data Type a
[Bool] :: Type Bool
[Int8] :: Type Int8
[Int16] :: Type Int16
[Int32] :: Type Int32
[Int64] :: Type Int64
[Word8] :: Type Word8
[Word16] :: Type Word16
[Word32] :: Type Word32
[Word64] :: Type Word64
[Float] :: Type Float
[Double] :: Type Double
[Array] :: forall (n :: Nat) t. (KnownNat n, Typed t) => Type t -> Type (Array n t)
[Struct] :: forall a. (Typed a, Struct a) => a -> Type a
data Int
(<$>) :: Functor f => (a -> b) -> f a -> f b
(=<<) :: Monad m => (a -> m b) -> m a -> m b
($) :: (a -> b) -> a -> b
fromIntegral :: (Integral a, Num b) => a -> b
not :: Stream Bool -> Stream Bool
class Functor (f :: Type -> Type)
fmap :: Functor f => (a -> b) -> f a -> f b
(<$) :: Functor f => a -> f b -> f a
putStr :: String -> IO ()
($!) :: (a -> b) -> a -> b
asTypeOf :: a -> a -> a
flip :: (a -> b -> c) -> b -> a -> c
id :: a -> a
either :: (a -> c) -> (b -> c) -> Either a b -> c
all :: Foldable t => (a -> Bool) -> t a -> Bool
and :: Foldable t => t Bool -> Bool
any :: Foldable t => (a -> Bool) -> t a -> Bool
concat :: Foldable t => t [a] -> [a]
concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()
notElem :: (Foldable t, Eq a) => a -> t a -> Bool
or :: Foldable t => t Bool -> Bool
sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()
maybe :: b -> (a -> b) -> Maybe a -> b
lines :: String -> [String]
unlines :: [String] -> String
unwords :: [String] -> String
words :: String -> [String]
curry :: ((a, b) -> c) -> a -> b -> c
fst :: (a, b) -> a
snd :: (a, b) -> b
uncurry :: (a -> b -> c) -> (a, b) -> c
error :: HasCallStack => [Char] -> a
errorWithoutStackTrace :: [Char] -> a
undefined :: HasCallStack => a
ioError :: IOError -> IO a
userError :: String -> IOError
(!!) :: forall (n :: Nat) t. Stream (Array n t) -> Stream Word32 -> Projection (Array n t) (Stream Word32) t
break :: (a -> Bool) -> [a] -> ([a], [a])
drop :: Typed a => Int -> Stream a -> Stream a
dropWhile :: (a -> Bool) -> [a] -> [a]
head :: HasCallStack => [a] -> a
init :: HasCallStack => [a] -> [a]
iterate :: (a -> a) -> a -> [a]
last :: HasCallStack => [a] -> a
lookup :: Eq a => a -> [(a, b)] -> Maybe b
repeat :: a -> [a]
replicate :: Int -> a -> [a]
reverse :: [a] -> [a]
scanl :: (b -> a -> b) -> b -> [a] -> [b]
scanl1 :: (a -> a -> a) -> [a] -> [a]
scanr :: (a -> b -> b) -> b -> [a] -> [b]
scanr1 :: (a -> a -> a) -> [a] -> [a]
span :: (a -> Bool) -> [a] -> ([a], [a])
splitAt :: Int -> [a] -> ([a], [a])
tail :: HasCallStack => [a] -> [a]
takeWhile :: (a -> Bool) -> [a] -> [a]
unzip :: [(a, b)] -> ([a], [b])
unzip3 :: [(a, b, c)] -> ([a], [b], [c])
zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
subtract :: Num a => a -> a -> a
lex :: ReadS String
readParen :: Bool -> ReadS a -> ReadS a
(^) :: (Typed a, Typed b, Num a, Bits a, Integral b) => Stream a -> Stream b -> Stream a
(^^) :: (Fractional a, Integral b) => a -> b -> a
even :: Integral a => a -> Bool
gcd :: Integral a => a -> a -> a
lcm :: Integral a => a -> a -> a
odd :: Integral a => a -> Bool
showChar :: Char -> ShowS
showParen :: Bool -> ShowS -> ShowS
showString :: String -> ShowS
shows :: Show a => a -> ShowS
appendFile :: FilePath -> String -> IO ()
getChar :: IO Char
getContents :: IO String
getLine :: IO String
interact :: (String -> String) -> IO ()
putChar :: Char -> IO ()
putStrLn :: String -> IO ()
readFile :: FilePath -> IO String
readIO :: Read a => String -> IO a
readLn :: Read a => IO a
writeFile :: FilePath -> String -> IO ()
read :: Read a => String -> a
reads :: Read a => ReadS a
(&&) :: Stream Bool -> Stream Bool -> Stream Bool
(||) :: Stream Bool -> Stream Bool -> Stream Bool
class Foldable (t :: Type -> Type)
foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
foldl' :: Foldable t => (b -> a -> b) -> b -> t a -> b
foldr1 :: Foldable t => (a -> a -> a) -> t a -> a
foldl1 :: Foldable t => (a -> a -> a) -> t a -> a
null :: Foldable t => t a -> Bool
length :: Foldable t => t a -> Int
elem :: (Foldable t, Eq a) => a -> t a -> Bool
maximum :: (Foldable t, Ord a) => t a -> a
minimum :: (Foldable t, Ord a) => t a -> a
product :: (Foldable t, Num a) => t a -> a
class (Functor t, Foldable t) => Traversable (t :: Type -> Type)
traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)
class Bounded a
minBound :: Bounded a => a
maxBound :: Bounded a => a
class Enum a
succ :: Enum a => a -> a
pred :: Enum a => a -> a
toEnum :: Enum a => Int -> a
fromEnum :: Enum a => a -> Int
enumFrom :: Enum a => a -> [a]
enumFromThen :: Enum a => a -> a -> [a]
enumFromTo :: Enum a => a -> a -> [a]
enumFromThenTo :: Enum a => a -> a -> a -> [a]
class Fractional a => Floating a
pi :: Floating a => a
exp :: Floating a => a -> a
log :: Floating a => a -> a
sqrt :: Floating a => a -> a
(**) :: Floating a => a -> a -> a
logBase :: Floating a => a -> a -> a
sin :: Floating a => a -> a
cos :: Floating a => a -> a
tan :: Floating a => a -> a
asin :: Floating a => a -> a
acos :: Floating a => a -> a
atan :: Floating a => a -> a
sinh :: Floating a => a -> a
cosh :: Floating a => a -> a
tanh :: Floating a => a -> a
asinh :: Floating a => a -> a
acosh :: Floating a => a -> a
atanh :: Floating a => a -> a
class (RealFrac a, Floating a) => RealFloat a
floatRadix :: RealFloat a => a -> Integer
floatDigits :: RealFloat a => a -> Int
floatRange :: RealFloat a => a -> (Int, Int)
decodeFloat :: RealFloat a => a -> (Integer, Int)
encodeFloat :: RealFloat a => Integer -> Int -> a
exponent :: RealFloat a => a -> Int
significand :: RealFloat a => a -> a
scaleFloat :: RealFloat a => Int -> a -> a
isNaN :: RealFloat a => a -> Bool
isInfinite :: RealFloat a => a -> Bool
isDenormalized :: RealFloat a => a -> Bool
isNegativeZero :: RealFloat a => a -> Bool
isIEEE :: RealFloat a => a -> Bool
atan2 :: RealFloat a => a -> a -> a
type IOError = IOException
class Read a
readsPrec :: Read a => Int -> ReadS a
readList :: Read a => ReadS [a]
class Num a => Fractional a
(/) :: Fractional a => a -> a -> a
recip :: Fractional a => a -> a
fromRational :: Fractional a => Rational -> a
div :: (Typed a, Integral a) => Stream a -> Stream a -> Stream a
class (Real a, Enum a) => Integral a
quot :: Integral a => a -> a -> a
rem :: Integral a => a -> a -> a
quotRem :: Integral a => a -> a -> (a, a)
divMod :: Integral a => a -> a -> (a, a)
toInteger :: Integral a => a -> Integer
mod :: (Typed a, Integral a) => Stream a -> Stream a -> Stream a
class (Real a, Fractional a) => RealFrac a
properFraction :: (RealFrac a, Integral b) => a -> (b, a)
truncate :: (RealFrac a, Integral b) => a -> b
round :: (RealFrac a, Integral b) => a -> b
ceiling :: (RealFrac a, Integral b) => a -> b
floor :: (RealFrac a, Integral b) => a -> b
class Show a
showsPrec :: Show a => Int -> a -> ShowS
show :: Show a => a -> String
showList :: Show a => [a] -> ShowS
type ShowS = String -> String
type ReadS a = String -> [(a, String)]
(/=) :: (Eq a, Typed a) => Stream a -> Stream a -> Stream Bool
(<) :: (Ord a, Typed a) => Stream a -> Stream a -> Stream Bool
(<=) :: (Ord a, Typed a) => Stream a -> Stream a -> Stream Bool
(>) :: (Ord a, Typed a) => Stream a -> Stream a -> Stream Bool
class Eq a => Ord a
compare :: Ord a => a -> a -> Ordering
(==>) :: Stream Bool -> Stream Bool -> Stream Bool
data Char
data Double
data Float
data Word
data Ordering
LT :: Ordering
EQ :: Ordering
GT :: Ordering
data Maybe a
Nothing :: Maybe a
Just :: a -> Maybe a
class a ~# b => (a :: k) ~ (b :: k)
otherwise :: Bool
(++) :: Typed a => [a] -> Stream a -> Stream a
map :: (a -> b) -> [a] -> [b]
class Semigroup a => Monoid a
mempty :: Monoid a => a
mappend :: Monoid a => a -> a -> a
mconcat :: Monoid a => [a] -> a
data Either a b
Left :: a -> Either a b
Right :: b -> Either a b
zip :: [a] -> [b] -> [(a, b)]
filter :: (a -> Bool) -> [a] -> [a]
realToFrac :: (Real a, Fractional b) => a -> b
class (Num a, Ord a) => Real a
toRational :: Real a => a -> Rational
type Rational = Ratio Integer
print :: Show a => a -> IO ()
(==) :: (Eq a, Typed a) => Stream a -> Stream a -> Stream Bool
(>=) :: (Ord a, Typed a) => Stream a -> Stream a -> Stream Bool
class Eq a
type Name = String
class Cast a b
cast :: Cast a b => Stream a -> Stream b
data Stream a
data Array (n :: Nat) t
data Field (s :: Symbol) t
Field :: t -> Field (s :: Symbol) t
data Int16
data Int32
data Int64
data Int8
data SimpleType
[SBool] :: SimpleType
[SInt8] :: SimpleType
[SInt16] :: SimpleType
[SInt32] :: SimpleType
[SInt64] :: SimpleType
[SWord8] :: SimpleType
[SWord16] :: SimpleType
[SWord32] :: SimpleType
[SWord64] :: SimpleType
[SFloat] :: SimpleType
[SDouble] :: SimpleType
[SArray] :: forall t. Type t -> SimpleType
[SStruct] :: SimpleType
class Struct a
typeName :: Struct a => a -> String
toValues :: Struct a => a -> [Value a]
updateField :: Struct a => a -> Value t -> a
class (Show a, Typeable a) => Typed a
typeOf :: Typed a => Type a
simpleType :: Typed a => Type a -> SimpleType
data UType
UType :: Type a -> UType
data Value a
Value :: Type t -> Field s t -> Value a
data Word16
data Word32
data Word64
data Word8
accessorName :: forall a (s :: Symbol) t. (Struct a, KnownSymbol s) => (a -> Field s t) -> String
fieldName :: forall (s :: Symbol) t. KnownSymbol s => Field s t -> String
toValuesDefault :: (Generic a, GStruct (Rep a)) => a -> [Value a]
typeLength :: forall (n :: Nat) t. KnownNat n => Type (Array n t) -> Int
typeNameDefault :: (Generic a, GDatatype (Rep a)) => a -> String
typeOfDefault :: (Typed a, Struct a, Generic a, GTypedStruct (Rep a)) => Type a
typeSize :: forall (n :: Nat) t. KnownNat n => Type (Array n t) -> Int
updateFieldDefault :: (Generic a, GStruct (Rep a)) => a -> Value t -> a
arrayElems :: forall (n :: Nat) a. Array n a -> [a]
arrayUpdate :: forall (n :: Nat) a. Array n a -> Int -> a -> Array n a
bitReverse16 :: Word16 -> Word16
bitReverse32 :: Word32 -> Word32
bitReverse64 :: Word64 -> Word64
bitReverse8 :: Word8 -> Word8
byteSwap16 :: Word16 -> Word16
byteSwap32 :: Word32 -> Word32
byteSwap64 :: Word64 -> Word64
badUsage :: String -> a
impossible :: String -> String -> a
csv :: Integer -> Spec -> IO ()
(!) :: forall (n :: Nat) t. (KnownNat n, Typed t) => Stream (Array n t) -> Stream Word32 -> Stream t
(.<<.) :: (Bits a, Typed a, Typed b, Integral b) => Stream a -> Stream b -> Stream a
(.>>.) :: (Bits a, Typed a, Typed b, Integral b) => Stream a -> Stream b -> Stream a
false :: Stream Bool
true :: Stream Bool
xor :: Stream Bool -> Stream Bool -> Stream Bool
class UnsafeCast a b
unsafeCast :: UnsafeCast a b => Stream a -> Stream b
constB :: Bool -> Stream Bool
constD :: Double -> Stream Double
constF :: Float -> Stream Float
constI16 :: Int16 -> Stream Int16
constI32 :: Int32 -> Stream Int32
constI64 :: Int64 -> Stream Int64
constI8 :: Int8 -> Stream Int8
constW16 :: Word16 -> Stream Word16
constW32 :: Word32 -> Stream Word32
constW64 :: Word64 -> Stream Word64
constW8 :: Word8 -> Stream Word8
constant :: Typed a => a -> Stream a
extern :: Typed a => String -> Maybe [a] -> Stream a
externB :: String -> Maybe [Bool] -> Stream Bool
externD :: String -> Maybe [Double] -> Stream Double
externF :: String -> Maybe [Float] -> Stream Float
externI16 :: String -> Maybe [Int16] -> Stream Int16
externI32 :: String -> Maybe [Int32] -> Stream Int32
externI64 :: String -> Maybe [Int64] -> Stream Int64
externI8 :: String -> Maybe [Int8] -> Stream Int8
externW16 :: String -> Maybe [Word16] -> Stream Word16
externW32 :: String -> Maybe [Word32] -> Stream Word32
externW64 :: String -> Maybe [Word64] -> Stream Word64
externW8 :: String -> Maybe [Word8] -> Stream Word8
local :: (Typed a, Typed b) => Stream a -> (Stream a -> Stream b) -> Stream b
ifThenElse :: Typed a => Stream Bool -> Stream a -> Stream a -> Stream a
mux :: Typed a => Stream Bool -> Stream a -> Stream a -> Stream a
class Projectable d s t | d s -> t where {
    data Projection d s t;
}
(=:) :: Projectable d s t => Projection d s t -> Stream t -> Stream d
(=$) :: Projectable d s t => Projection d s t -> (Stream t -> Stream t) -> Stream d
data family Projection d s t
(#) :: forall (f :: Symbol) t s. (KnownSymbol f, Typed t, Typed s, Struct s) => Stream s -> (s -> Field f t) -> Stream t
(##) :: forall (f :: Symbol) t s. (KnownSymbol f, Typed t, Typed s, Struct s) => Stream s -> (s -> Field f t) -> Projection s (s -> Field f t) t
arg :: Typed a => Stream a -> Arg
exists :: Stream Bool -> Prop Existential
forAll :: Stream Bool -> Prop Universal
observer :: Typed a => String -> Stream a -> Spec
prop :: String -> Prop a -> Writer [SpecItem] (PropRef a)
theorem :: String -> Prop a -> Proof a -> Writer [SpecItem] (PropRef a)
trigger :: String -> Stream Bool -> [Arg] -> Spec
(.^.) :: Bits a => a -> a -> a
class Eq a => Bits a
(.&.) :: Bits a => a -> a -> a
(.|.) :: Bits a => a -> a -> a
complement :: Bits a => a -> a
seq :: a -> b -> b
class Monad m => MonadFail (m :: Type -> Type)
fail :: MonadFail m => String -> m a
(.) :: (b -> c) -> (a -> b) -> a -> c
class Functor f => Applicative (f :: Type -> Type)
pure :: Applicative f => a -> f a
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
(*>) :: Applicative f => f a -> f b -> f b
(<*) :: Applicative f => f a -> f b -> f a
class Semigroup a
(<>) :: Semigroup a => a -> a -> a
class Num a
(+) :: Num a => a -> a -> a
(-) :: Num a => a -> a -> a
(*) :: Num a => a -> a -> a
negate :: Num a => a -> a
abs :: Num a => a -> a
signum :: Num a => a -> a
fromInteger :: Num a => Integer -> a
class Applicative m => Monad (m :: Type -> Type)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
(>>) :: Monad m => m a -> m b -> m b
return :: Monad m => a -> m a
data Integer
data IO a
type FilePath = String
type String = [Char]
data Bool
False :: Bool
True :: Bool
data Int
(<$>) :: Functor f => (a -> b) -> f a -> f b
(=<<) :: Monad m => (a -> m b) -> m a -> m b
($) :: (a -> b) -> a -> b
fromIntegral :: (Integral a, Num b) => a -> b
class Functor (f :: Type -> Type)
fmap :: Functor f => (a -> b) -> f a -> f b
(<$) :: Functor f => a -> f b -> f a
putStr :: String -> IO ()
($!) :: (a -> b) -> a -> b
asTypeOf :: a -> a -> a
flip :: (a -> b -> c) -> b -> a -> c
id :: a -> a
either :: (a -> c) -> (b -> c) -> Either a b -> c
all :: Foldable t => (a -> Bool) -> t a -> Bool
and :: Foldable t => t Bool -> Bool
any :: Foldable t => (a -> Bool) -> t a -> Bool
concat :: Foldable t => t [a] -> [a]
concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()
notElem :: (Foldable t, Eq a) => a -> t a -> Bool
or :: Foldable t => t Bool -> Bool
sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()
maybe :: b -> (a -> b) -> Maybe a -> b
lines :: String -> [String]
unlines :: [String] -> String
unwords :: [String] -> String
words :: String -> [String]
curry :: ((a, b) -> c) -> a -> b -> c
fst :: (a, b) -> a
snd :: (a, b) -> b
uncurry :: (a -> b -> c) -> (a, b) -> c
error :: HasCallStack => [Char] -> a
errorWithoutStackTrace :: [Char] -> a
undefined :: HasCallStack => a
ioError :: IOError -> IO a
userError :: String -> IOError
break :: (a -> Bool) -> [a] -> ([a], [a])
dropWhile :: (a -> Bool) -> [a] -> [a]
head :: HasCallStack => [a] -> a
init :: HasCallStack => [a] -> [a]
iterate :: (a -> a) -> a -> [a]
last :: HasCallStack => [a] -> a
lookup :: Eq a => a -> [(a, b)] -> Maybe b
repeat :: a -> [a]
replicate :: Int -> a -> [a]
reverse :: [a] -> [a]
scanl :: (b -> a -> b) -> b -> [a] -> [b]
scanl1 :: (a -> a -> a) -> [a] -> [a]
scanr :: (a -> b -> b) -> b -> [a] -> [b]
scanr1 :: (a -> a -> a) -> [a] -> [a]
span :: (a -> Bool) -> [a] -> ([a], [a])
splitAt :: Int -> [a] -> ([a], [a])
tail :: HasCallStack => [a] -> [a]
takeWhile :: (a -> Bool) -> [a] -> [a]
unzip :: [(a, b)] -> ([a], [b])
unzip3 :: [(a, b, c)] -> ([a], [b], [c])
zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
subtract :: Num a => a -> a -> a
lex :: ReadS String
readParen :: Bool -> ReadS a -> ReadS a
(^^) :: (Fractional a, Integral b) => a -> b -> a
even :: Integral a => a -> Bool
gcd :: Integral a => a -> a -> a
lcm :: Integral a => a -> a -> a
odd :: Integral a => a -> Bool
showChar :: Char -> ShowS
showParen :: Bool -> ShowS -> ShowS
showString :: String -> ShowS
shows :: Show a => a -> ShowS
appendFile :: FilePath -> String -> IO ()
getChar :: IO Char
getContents :: IO String
getLine :: IO String
interact :: (String -> String) -> IO ()
putChar :: Char -> IO ()
putStrLn :: String -> IO ()
readFile :: FilePath -> IO String
readIO :: Read a => String -> IO a
readLn :: Read a => IO a
writeFile :: FilePath -> String -> IO ()
read :: Read a => String -> a
reads :: Read a => ReadS a
class Foldable (t :: Type -> Type)
foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b
foldl' :: Foldable t => (b -> a -> b) -> b -> t a -> b
foldr1 :: Foldable t => (a -> a -> a) -> t a -> a
foldl1 :: Foldable t => (a -> a -> a) -> t a -> a
null :: Foldable t => t a -> Bool
length :: Foldable t => t a -> Int
elem :: (Foldable t, Eq a) => a -> t a -> Bool
maximum :: (Foldable t, Ord a) => t a -> a
minimum :: (Foldable t, Ord a) => t a -> a
product :: (Foldable t, Num a) => t a -> a
class (Functor t, Foldable t) => Traversable (t :: Type -> Type)
traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)
sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)
class Bounded a
minBound :: Bounded a => a
maxBound :: Bounded a => a
class Enum a
succ :: Enum a => a -> a
pred :: Enum a => a -> a
toEnum :: Enum a => Int -> a
fromEnum :: Enum a => a -> Int
enumFrom :: Enum a => a -> [a]
enumFromThen :: Enum a => a -> a -> [a]
enumFromTo :: Enum a => a -> a -> [a]
enumFromThenTo :: Enum a => a -> a -> a -> [a]
class Fractional a => Floating a
pi :: Floating a => a
exp :: Floating a => a -> a
log :: Floating a => a -> a
sqrt :: Floating a => a -> a
(**) :: Floating a => a -> a -> a
logBase :: Floating a => a -> a -> a
sin :: Floating a => a -> a
cos :: Floating a => a -> a
tan :: Floating a => a -> a
asin :: Floating a => a -> a
acos :: Floating a => a -> a
atan :: Floating a => a -> a
sinh :: Floating a => a -> a
cosh :: Floating a => a -> a
tanh :: Floating a => a -> a
asinh :: Floating a => a -> a
acosh :: Floating a => a -> a
atanh :: Floating a => a -> a
class (RealFrac a, Floating a) => RealFloat a
floatRadix :: RealFloat a => a -> Integer
floatDigits :: RealFloat a => a -> Int
floatRange :: RealFloat a => a -> (Int, Int)
decodeFloat :: RealFloat a => a -> (Integer, Int)
encodeFloat :: RealFloat a => Integer -> Int -> a
exponent :: RealFloat a => a -> Int
significand :: RealFloat a => a -> a
scaleFloat :: RealFloat a => Int -> a -> a
isNaN :: RealFloat a => a -> Bool
isInfinite :: RealFloat a => a -> Bool
isDenormalized :: RealFloat a => a -> Bool
isNegativeZero :: RealFloat a => a -> Bool
isIEEE :: RealFloat a => a -> Bool
atan2 :: RealFloat a => a -> a -> a
type IOError = IOException
class Read a
readsPrec :: Read a => Int -> ReadS a
readList :: Read a => ReadS [a]
class Num a => Fractional a
(/) :: Fractional a => a -> a -> a
recip :: Fractional a => a -> a
fromRational :: Fractional a => Rational -> a
class (Real a, Enum a) => Integral a
quot :: Integral a => a -> a -> a
rem :: Integral a => a -> a -> a
quotRem :: Integral a => a -> a -> (a, a)
divMod :: Integral a => a -> a -> (a, a)
toInteger :: Integral a => a -> Integer
class (Real a, Fractional a) => RealFrac a
properFraction :: (RealFrac a, Integral b) => a -> (b, a)
truncate :: (RealFrac a, Integral b) => a -> b
round :: (RealFrac a, Integral b) => a -> b
ceiling :: (RealFrac a, Integral b) => a -> b
floor :: (RealFrac a, Integral b) => a -> b
class Show a
showsPrec :: Show a => Int -> a -> ShowS
show :: Show a => a -> String
showList :: Show a => [a] -> ShowS
type ShowS = String -> String
type ReadS a = String -> [(a, String)]
class Eq a => Ord a
compare :: Ord a => a -> a -> Ordering
data Char
data Double
data Float
data Word
data Ordering
LT :: Ordering
EQ :: Ordering
GT :: Ordering
data Maybe a
Nothing :: Maybe a
Just :: a -> Maybe a
class a ~# b => (a :: k) ~ (b :: k)
otherwise :: Bool
map :: (a -> b) -> [a] -> [b]
class Semigroup a => Monoid a
mempty :: Monoid a => a
mappend :: Monoid a => a -> a -> a
mconcat :: Monoid a => [a] -> a
data Either a b
Left :: a -> Either a b
Right :: b -> Either a b
zip :: [a] -> [b] -> [(a, b)]
filter :: (a -> Bool) -> [a] -> [a]
realToFrac :: (Real a, Fractional b) => a -> b
class (Num a, Ord a) => Real a
toRational :: Real a => a -> Rational
type Rational = Ratio Integer
print :: Show a => a -> IO ()
class Eq a
seq :: a -> b -> b
class Monad m => MonadFail (m :: Type -> Type)
fail :: MonadFail m => String -> m a
reify :: Spec' a -> IO Spec
until :: Integral a => a -> Stream Bool -> Stream Bool -> Stream Bool
cycle :: Typed a => [a] -> Stream a
take :: (Integral a, Typed b) => a -> Stream b -> [Stream b]
sum :: (Typed a, Num a, Eq a) => Int -> Stream a -> Stream a
max :: (Typed a, Ord a) => Int -> Stream a -> Stream a
min :: (Typed a, Ord a) => Int -> Stream a -> Stream a
next :: Stream Bool -> Stream Bool
tails :: Typed a => Stream a -> [Stream a]
clk :: Integral a => Period a -> Phase a -> Stream Bool
clk1 :: (Integral a, Typed a) => Period a -> Phase a -> Stream Bool
period :: Integral a => a -> Period a
phase :: Integral a => a -> Phase a
always :: Integral a => a -> Stream Bool -> Stream Bool
eventually :: Integral a => a -> Stream Bool -> Stream Bool
release :: Integral a => a -> Stream Bool -> Stream Bool -> Stream Bool
alwaysBeen :: Stream Bool -> Stream Bool
eventuallyPrev :: Stream Bool -> Stream Bool
previous :: Stream Bool -> Stream Bool
since :: Stream Bool -> Stream Bool -> Stream Bool
copilotRegexp :: (Typed t, SymbolParser t, Eq t) => Stream t -> SourceName -> Stream Bool -> Stream Bool
copilotRegexpB :: SourceName -> [(StreamName, Stream Bool)] -> Stream Bool -> Stream Bool
stack :: (Integral a, Typed b) => a -> b -> Stream Bool -> Stream Bool -> Stream b -> Stream b
stack' :: (Integral a, Typed b) => a -> b -> Stream Bool -> Stream Bool -> Stream b -> Stream b
mean :: (Typed a, Eq a, Fractional a) => Int -> Stream a -> Stream a
meanNow :: (Typed a, Integral a) => [Stream a] -> Stream a
(!!!) :: (Typed a, Eq b, Num b, Typed b) => [Stream a] -> Stream b -> Stream a
case' :: Typed a => [Stream Bool] -> [Stream a] -> Stream a
nfoldl :: (Typed a, Typed b) => Int -> (Stream a -> Stream b -> Stream a) -> Stream a -> Stream b -> Stream a
nfoldl1 :: Typed a => Int -> (Stream a -> Stream a -> Stream a) -> Stream a -> Stream a
nfoldr :: (Typed a, Typed b) => Int -> (Stream a -> Stream b -> Stream b) -> Stream b -> Stream a -> Stream b
nfoldr1 :: Typed a => Int -> (Stream a -> Stream a -> Stream a) -> Stream a -> Stream a
nscanl :: (Typed a, Typed b) => Int -> (Stream a -> Stream b -> Stream a) -> Stream a -> Stream b -> [Stream a]
nscanl1 :: Typed a => Int -> (Stream a -> Stream a -> Stream a) -> Stream a -> [Stream a]
nscanr :: Typed a => Int -> (Stream a -> Stream b -> Stream b) -> Stream b -> Stream a -> [Stream b]
nscanr1 :: Typed a => Int -> (Stream a -> Stream a -> Stream a) -> Stream a -> [Stream a]
aMajority :: (Eq a, Typed a) => [Stream a] -> Stream a -> Stream Bool
majority :: (Eq a, Typed a) => [Stream a] -> Stream a

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