Safe Haskell | None |
---|
A pipeline is an abstraction of a single compiler pass.
NOTE: The Haddock documentation on pipeline constructors is missing because Haddock does not support commenting GADTs. See the source code for documentation.
- data Error
- = ErrorSaltLoad (Error Name)
- | forall err . Pretty err => ErrorSaltConvert !err
- | forall err . Pretty err => ErrorLiteConvert !err
- | forall err . Pretty err => ErrorLoad !err
- | forall err . Pretty err => ErrorLint !err
- data PipeText n err where
- pipeText :: NFData n => String -> Int -> String -> PipeText n err -> IO [Error]
- data PipeCore a n where
- PipeCoreId :: ![PipeCore a n] -> PipeCore a n
- PipeCoreOutput :: !Sink -> PipeCore a n
- PipeCoreCheck :: !(Fragment n err) -> ![PipeCore (AnTEC a n) n] -> PipeCore a n
- PipeCoreReCheck :: (Show a, NFData a) => !(Fragment n err) -> ![PipeCore (AnTEC a n) n] -> PipeCore (AnTEC a n') n
- PipeCoreStrip :: ![PipeCore () n] -> PipeCore a n
- PipeCoreSimplify :: !(Fragment n err) -> !s -> !(Simplifier s a n) -> ![PipeCore () n] -> PipeCore a n
- PipeCoreAsLite :: ![PipeLite] -> PipeCore (AnTEC () Name) Name
- PipeCoreAsSalt :: Pretty a => ![PipeSalt a] -> PipeCore a Name
- PipeCoreHacks :: Canned (Module a n -> IO (Module a n)) -> ![PipeCore a n] -> PipeCore a n
- pipeCore :: (NFData a, Show a, NFData n, Eq n, Ord n, Show n, Pretty n) => Module a n -> PipeCore a n -> IO [Error]
- data PipeLite
- = PipeLiteOutput !Sink
- | PipeLiteToSalt !Platform !Config ![PipeCore () Name]
- pipeLite :: Module (AnTEC () Name) Name -> PipeLite -> IO [Error]
- data PipeSalt a where
- PipeSaltId :: ![PipeSalt a] -> PipeSalt a
- PipeSaltOutput :: !Sink -> PipeSalt a
- PipeSaltTransfer :: ![PipeSalt (AnTEC a Name)] -> PipeSalt (AnTEC a Name)
- PipeSaltPrint :: !Bool -> !Platform -> !Sink -> PipeSalt a
- PipeSaltToLlvm :: !Platform -> ![PipeLlvm] -> PipeSalt a
- PipeSaltCompile :: !Platform -> !Builder -> !FilePath -> !FilePath -> !(Maybe FilePath) -> !Bool -> PipeSalt a
- pipeSalt :: (Show a, Pretty a, NFData a) => Module a Name -> PipeSalt a -> IO [Error]
- data PipeLlvm
- pipeLlvm :: Module -> PipeLlvm -> IO [Error]
- data Sink
- pipeSink :: String -> Sink -> IO [Error]
Errors
ErrorSaltLoad (Error Name) | |
forall err . Pretty err => ErrorSaltConvert !err | Error converting the module to Disciple Core Salt. |
forall err . Pretty err => ErrorLiteConvert !err | Error converting the module to Disciple Core Lite. |
forall err . Pretty err => ErrorLoad !err | Error when loading a module. Blame it on the user. |
forall err . Pretty err => ErrorLint !err | Error when type checking a transformed module. Blame it on the compiler. |
Source code
pipeText :: NFData n => String -> Int -> String -> PipeText n err -> IO [Error]Source
Process a text module.
Returns empty list on success.
Generic Core modules
Process a core module.
PipeCoreId :: ![PipeCore a n] -> PipeCore a n | |
PipeCoreOutput :: !Sink -> PipeCore a n | |
PipeCoreCheck :: !(Fragment n err) -> ![PipeCore (AnTEC a n) n] -> PipeCore a n | |
PipeCoreReCheck :: (Show a, NFData a) => !(Fragment n err) -> ![PipeCore (AnTEC a n) n] -> PipeCore (AnTEC a n') n | |
PipeCoreStrip :: ![PipeCore () n] -> PipeCore a n | |
PipeCoreSimplify :: !(Fragment n err) -> !s -> !(Simplifier s a n) -> ![PipeCore () n] -> PipeCore a n | |
PipeCoreAsLite :: ![PipeLite] -> PipeCore (AnTEC () Name) Name | |
PipeCoreAsSalt :: Pretty a => ![PipeSalt a] -> PipeCore a Name | |
PipeCoreHacks :: Canned (Module a n -> IO (Module a n)) -> ![PipeCore a n] -> PipeCore a n |
pipeCore :: (NFData a, Show a, NFData n, Eq n, Ord n, Show n, Pretty n) => Module a n -> PipeCore a n -> IO [Error]Source
Process a Core module.
Returns empty list on success.
Core Lite modules
Process a Core Lite module.
PipeLiteOutput !Sink | Output the module in core language syntax. |
PipeLiteToSalt !Platform !Config ![PipeCore () Name] | Convert the module to the Core Salt Fragment. |
Core Salt modules
Process a Core Salt module.
PipeSaltId :: ![PipeSalt a] -> PipeSalt a | |
PipeSaltOutput :: !Sink -> PipeSalt a | |
PipeSaltTransfer :: ![PipeSalt (AnTEC a Name)] -> PipeSalt (AnTEC a Name) | |
PipeSaltPrint :: !Bool -> !Platform -> !Sink -> PipeSalt a | |
PipeSaltToLlvm :: !Platform -> ![PipeLlvm] -> PipeSalt a | |
PipeSaltCompile :: !Platform -> !Builder -> !FilePath -> !FilePath -> !(Maybe FilePath) -> !Bool -> PipeSalt a |
pipeSalt :: (Show a, Pretty a, NFData a) => Module a Name -> PipeSalt a -> IO [Error]Source
Process a Core Salt module.
Returns empty list on success.
LLVM modules
Process an LLVM module.
pipeLlvm :: Module -> PipeLlvm -> IO [Error]Source
Process an LLVM module.
Returns empty list on success.
Emitting output
What to do with program text.
SinkDiscard | Drop it on the floor. |
SinkStdout | Emit it to stdout. |
SinkFile FilePath | Write it to this file. |