-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A Haskell-embedded DSL for monitoring hard real-time distributed systems. -- -- The concrete syntax for Copilot. -- -- Copilot is a stream (i.e., infinite lists) domain-specific language -- (DSL) in Haskell that compiles into embedded C. Copilot contains an -- interpreter, multiple back-end compilers, and other verification -- tools. A tutorial, bug reports, and todos are available at -- https://github.com/niswegmann/copilot-discussion. -- -- Examples are available at -- https://github.com/leepike/Copilot/tree/master/Examples. @package copilot-language @version 0.9.1 -- | Reexports Prelude from package base hiding identifiers -- redefined by Copilot. module Copilot.Language.Prelude -- | Bitwise operators. module Copilot.Language.Operators.BitWise -- | The Bits class defines bitwise operations over integral types. -- -- -- -- Minimal complete definition: .&., .|., xor, -- complement, (shift or (shiftL and -- shiftR)), (rotate or (rotateL and -- rotateR)), bitSize and isSigned. class (Eq a, Num a) => Bits a (.&.) :: Bits a => a -> a -> a (.|.) :: Bits a => a -> a -> a complement :: Bits a => a -> a (.^.) :: Bits a => a -> a -> a (.<<., .>>.) :: (Bits a, Typed a, Typed b, Integral b) => Stream a -> Stream b -> Stream a instance [safe] (Typed a, Bits a) => Bits (Stream a) -- | Stream construction. module Copilot.Language.Operators.Temporal (++) :: Typed a => [a] -> Stream a -> Stream a drop :: Typed a => Int -> Stream a -> Stream a -- | Comparison operators. module Copilot.Language.Operators.Ord (<=) :: (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 (>) :: (Ord a, Typed a) => Stream a -> Stream a -> Stream Bool -- | if-then-else. module Copilot.Language.Operators.Mux mux :: Typed a => Stream Bool -> Stream a -> Stream a -> Stream a ifThenElse :: Typed a => Stream Bool -> Stream a -> Stream a -> Stream a -- | Integral class operators. module Copilot.Language.Operators.Integral div :: (Typed a, Integral a) => Stream a -> Stream a -> Stream a mod :: (Typed a, Integral a) => Stream a -> Stream a -> Stream a (^) :: (Typed a, Typed b, Num a, Bits a, Integral b) => Stream a -> Stream b -> Stream a -- | Let expressions. module Copilot.Language.Operators.Local local :: (Typed a, Typed b) => Stream a -> (Stream a -> Stream b) -> Stream b -- | External variables, arrays, and functions. module Copilot.Language.Operators.Extern extern :: Typed a => String -> Maybe [a] -> Stream a externB :: String -> Maybe [Bool] -> Stream Bool externW8 :: String -> Maybe [Word8] -> Stream Word8 externW16 :: String -> Maybe [Word16] -> Stream Word16 externW32 :: String -> Maybe [Word32] -> Stream Word32 externW64 :: String -> Maybe [Word64] -> Stream Word64 externI8 :: String -> Maybe [Int8] -> Stream Int8 externI16 :: String -> Maybe [Int16] -> Stream Int16 externI32 :: String -> Maybe [Int32] -> Stream Int32 externI64 :: String -> Maybe [Int64] -> Stream Int64 externF :: String -> Maybe [Float] -> Stream Float externD :: String -> Maybe [Double] -> Stream Double externFun :: Typed a => String -> [Arg] -> Maybe (Stream a) -> Stream a externArray :: (Typed a, Typed b, Integral a) => String -> Stream a -> Size -> Maybe [[b]] -> Stream b externArrayB :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Bool]] -> Stream Bool externArrayW8 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Word8]] -> Stream Word8 externArrayW16 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Word16]] -> Stream Word16 externArrayW32 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Word32]] -> Stream Word32 externArrayW64 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Word64]] -> Stream Word64 externArrayI8 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Int8]] -> Stream Int8 externArrayI16 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Int16]] -> Stream Int16 externArrayI32 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Int32]] -> Stream Int32 externArrayI64 :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Int64]] -> Stream Int64 externArrayF :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Float]] -> Stream Float externArrayD :: (Typed a, Integral a) => String -> Stream a -> Size -> Maybe [[Double]] -> Stream Double -- | Deprecated. funArg :: Typed a => Stream a -> Arg -- | Equality operator. module Copilot.Language.Operators.Eq (==) :: (Eq a, Typed a) => Stream a -> Stream a -> Stream Bool (/=) :: (Eq a, Typed a) => Stream a -> Stream a -> Stream Bool -- | Constants. module Copilot.Language.Operators.Constant constant :: Typed a => a -> Stream a constB :: Bool -> Stream Bool constW8 :: Word8 -> Stream Word8 constW16 :: Word16 -> Stream Word16 constW32 :: Word32 -> Stream Word32 constW64 :: Word64 -> Stream Word64 constI8 :: Int8 -> Stream Int8 constI16 :: Int16 -> Stream Int16 constI32 :: Int32 -> Stream Int32 constI64 :: Int64 -> Stream Int64 constF :: Float -> Stream Float constD :: Double -> Stream Double -- | Type-safe casting operators. module Copilot.Language.Operators.Cast cast :: (Cast a b, Typed a, Typed b) => Stream a -> Stream b instance [safe] Cast Int64 Int64 instance [safe] Cast Int32 Int64 instance [safe] Cast Int32 Int32 instance [safe] Cast Int16 Int64 instance [safe] Cast Int16 Int32 instance [safe] Cast Int16 Int16 instance [safe] Cast Int8 Int64 instance [safe] Cast Int8 Int32 instance [safe] Cast Int8 Int16 instance [safe] Cast Int8 Int8 instance [safe] Cast Word64 Word64 instance [safe] Cast Word32 Int64 instance [safe] Cast Word32 Word64 instance [safe] Cast Word32 Word32 instance [safe] Cast Word16 Int64 instance [safe] Cast Word16 Int32 instance [safe] Cast Word16 Word64 instance [safe] Cast Word16 Word32 instance [safe] Cast Word16 Word16 instance [safe] Cast Word8 Int64 instance [safe] Cast Word8 Int32 instance [safe] Cast Word8 Int16 instance [safe] Cast Word8 Word64 instance [safe] Cast Word8 Word32 instance [safe] Cast Word8 Word16 instance [safe] Cast Word8 Word8 instance [safe] Cast Bool Int64 instance [safe] Cast Bool Int32 instance [safe] Cast Bool Int16 instance [safe] Cast Bool Int8 instance [safe] Cast Bool Word64 instance [safe] Cast Bool Word32 instance [safe] Cast Bool Word16 instance [safe] Cast Bool Word8 instance [safe] Cast Bool Bool -- | Boolean operators. module Copilot.Language.Operators.Boolean (&&) :: Stream Bool -> Stream Bool -> Stream Bool (||) :: Stream Bool -> Stream Bool -> Stream Bool not :: Stream Bool -> Stream Bool true :: Stream Bool false :: Stream Bool xor :: Stream Bool -> Stream Bool -> Stream Bool (==>) :: Stream Bool -> Stream Bool -> Stream Bool -- | Transforms a Copilot Language specification into a Copilot Core -- specification. module Copilot.Language.Reify reify :: Spec -> IO Spec -- | Main Copilot language export file. module Copilot.Language impossible :: String -> String -> a badUsage :: String -> a csv :: Integer -> Spec -> IO () -- | Much slower, but pretty-printed interpreter output. interpret :: Integer -> Spec -> IO () type Spec = Writer [SpecItem] () data Stream :: * -> * observer :: Typed a => String -> Stream a -> Spec trigger :: String -> Stream Bool -> [Arg] -> Spec arg :: Typed a => Stream a -> Arg prettyPrint :: Spec -> IO () -- | Main import module for the front-end lanugage. module Copilot