---------------------------------------------------------------- -- -- | 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