| Copyright | (c) Dennis Gosnell 2016 |
|---|---|
| License | BSD-style (see LICENSE file) |
| Maintainer | cdep.illabout@gmail.com |
| Stability | experimental |
| Portability | POSIX |
| Safe Haskell | None |
| Language | Haskell2010 |
Text.Pretty.Simple.Internal.Printer
Description
- data PrinterState = PrinterState {
- _currLine :: Int
- _currCharOnLine :: Int
- _indentStack :: [Int]
- _printerString :: String
- printerString :: Lens' PrinterState String
- indentStack :: Lens' PrinterState [Int]
- currLine :: Lens' PrinterState Int
- currCharOnLine :: Lens' PrinterState Int
- printerState :: Int -> Int -> [Int] -> String -> PrinterState
- initPrinterState :: PrinterState
- _headEx :: Lens' [Int] Int
- latestIndent :: Lens' PrinterState Int
- popIndent :: MonadState PrinterState m => m ()
- setIndentAtCurrChar :: MonadState PrinterState m => m ()
- putOpeningSymbol :: MonadState PrinterState m => String -> m ()
- putClosingSymbol :: MonadState PrinterState m => String -> m ()
- putComma :: MonadState PrinterState m => m ()
- putCommaSep :: forall m. MonadState PrinterState m => CommaSeparated [Expr] -> m ()
- putString :: MonadState PrinterState m => String -> m ()
- putSurroundExpr :: MonadState PrinterState m => String -> String -> CommaSeparated [Expr] -> m ()
- doIndent :: MonadState PrinterState m => m ()
- newLine :: MonadState PrinterState m => m ()
- newLineAndDoIndent :: MonadState PrinterState m => m ()
- putExpression :: MonadState PrinterState m => Expr -> m ()
- expressionPrint :: [Expr] -> String
Documentation
>>>import Control.Monad.State (State)>>>:{let test :: PrinterState -> State PrinterState a -> PrinterState test initState state = execState state initState testInit :: State PrinterState a -> PrinterState testInit = test initPrinterState :}
data PrinterState Source #
Constructors
| PrinterState | |
Fields
| |
Instances
indentStack :: Lens' PrinterState [Int] Source #
printerState :: Int -> Int -> [Int] -> String -> PrinterState Source #
latestIndent :: Lens' PrinterState Int Source #
This assumes that the indent stack is not empty.
popIndent :: MonadState PrinterState m => m () Source #
setIndentAtCurrChar :: MonadState PrinterState m => m () Source #
putOpeningSymbol :: MonadState PrinterState m => String -> m () Source #
putClosingSymbol :: MonadState PrinterState m => String -> m () Source #
putComma :: MonadState PrinterState m => m () Source #
putCommaSep :: forall m. MonadState PrinterState m => CommaSeparated [Expr] -> m () Source #
putString :: MonadState PrinterState m => String -> m () Source #
Arguments
| :: MonadState PrinterState m | |
| => String | starting character ( |
| -> String | ending character ( |
| -> CommaSeparated [Expr] | comma separated inner expression. |
| -> m () |
Print a surrounding expression (like [] or {} or ()).
If the CommaSeparated expressions are empty, just print the start and end
markers.
>>>testInit $ putSurroundExpr "[" "]" (CommaSeparated [])PrinterState {_currLine = 0, _currCharOnLine = 2, _indentStack = [0], _printerString = "[]"}
>>>let state = printerState 1 5 [5,0] "\nhello">>>test state $ putSurroundExpr "(" ")" (CommaSeparated [[]])PrinterState {_currLine = 1, _currCharOnLine = 7, _indentStack = [5,0], _printerString = "\nhello()"}
If there is only one expression, then just print it it all on one line, with spaces around the expressions.
>>>testInit $ putSurroundExpr "{" "}" (CommaSeparated [[Other "hello", Other "bye"]])PrinterState {_currLine = 0, _currCharOnLine = 12, _indentStack = [0], _printerString = "{ hellobye }"}
If there are multiple expressions, and this is indent level 0, then print out normally and put each expression on a different line with a comma. No indentation happens.
>>>comma = [[Other "hello"], [Other "bye"]]>>>testInit $ putSurroundExpr "[" "]" (CommaSeparated comma)PrinterState {_currLine = 2, _currCharOnLine = 1, _indentStack = [0], _printerString = "[ hello\n, bye\n]"}
doIndent :: MonadState PrinterState m => m () Source #
newLine :: MonadState PrinterState m => m () Source #
newLineAndDoIndent :: MonadState PrinterState m => m () Source #
putExpression :: MonadState PrinterState m => Expr -> m () Source #
expressionPrint :: [Expr] -> String Source #