compilation-0.0.0.2: Control/Compilation/String.hs
----------------------------------------------------------------
--
-- | Compilation
-- Monad and combinators for quickly assembling simple
-- compilers.
--
-- @Control\/Compilation\/String.hs@
--
-- A generic compilation monad and combinators for quickly
-- assembling simple compilers that emit an ASCII string
-- representation of the target language (well-suited for
-- direct syntax translators).
--
----------------------------------------------------------------
--
module Control.Compilation.String
where
import Control.Compilation
----------------------------------------------------------------
-- | Combinators and functions for compiling directly into a raw
-- ASCII string.
indent :: Compilation String ()
indent = Compilation $ \(State f i m n s) -> (State f (" " ++ i) m n s, ())
unindent :: Compilation String ()
unindent = Compilation $ \(State f i m n s) -> (State f (drop (min (length i) 2) i) m n s, ())
space :: Compilation String ()
space = Compilation $ \(State f i m n s) -> (State f i m n (s ++ " "), ())
spaces :: Int -> Compilation String ()
spaces k = Compilation $ \(State f i m n s) -> (State f i m n (s ++ (take k $ repeat ' ')), ())
newline :: Compilation String ()
newline = Compilation $ \(State f i m n s) -> (State f i m n (s ++ "\n" ++ i), ())
newlines :: Int -> Compilation String ()
newlines k = Compilation $ \(State f i m n s) -> (State f i m n (s ++ (take k $ repeat '\n') ++ i), ())
string :: String -> Compilation String ()
string s' = Compilation $ \(State f i m n s) -> (State f i m n (s ++ s'), ())
raw :: String -> Compilation String ()
raw = string
--eof