-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Simple system for generating code.
--   
--   Simple system for generating code.
@package code-builder
@version 0.1.3

module Code.Build

-- | Representation of code, each string represents a line
newtype Code
Code :: [String] -> Code
[unCode] :: Code -> [String]
showCode :: Code -> String

-- | Type class for lifting data structures into code
class Codeable a
code :: Codeable a => a -> Code
class CodeList a
codeList :: CodeList a => a -> [Code]
noCode :: Code
line :: Code
isNull :: Codeable a => a -> Bool
numLines :: CodeList a => a -> Int
singleLine :: CodeList a => a -> Bool
indent :: Codeable a => Int -> a -> Code
surround :: Codeable a => String -> String -> a -> Code
parenthesis :: Codeable a => a -> Code
accolades :: Codeable a => a -> Code
square :: Codeable a => a -> Code
align :: Codeable a => a -> Code
codeWidth :: Codeable a => a -> Int
codeLines :: Codeable a => a -> [Code]
many :: Codeable a => a -> Code
mkSequence :: Codeable a => [a] -> Code
mkStack :: Codeable a => [a] -> Code
interleave :: (Codeable a, CodeList l) => a -> l -> Code

-- | Join two blocks line by line, in the way of inner join, so both lines
--   have to be present.
(|><|) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 3 |><|

-- | Join two blocks line by line, in the way of outer join, so both
--   missing lines are discarded.
(><) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 3 ><

-- | Left outer-join
(|><) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 3 |><

-- | Right outer-join
(><|) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 3 ><|

-- | Sequencing. Place the second block after the last line of the first
--   block. Aligns the second block
(<+>) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 4 <+>

-- | Same as <a>++</a> but with space
(<++>) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 4 <++>

-- | Place the second block after the last line of the first block. Aligns
--   the second block
(<+|) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 4 <+|

-- | Combination of join and sequence. The code blocks in the second
--   argument are sequenced with the first argument.
(|>+<|) :: (Codeable a, CodeList b) => a -> b -> Code
infixl 3 |>+<|

-- | Place two pieces of code under each other
(<->) :: (Codeable a, Codeable b) => a -> b -> Code
infixl 2 <->
instance Code.Build.Codeable a => Code.Build.CodeList a
instance Code.Build.Codeable a => Code.Build.CodeList [a]
instance Code.Build.Codeable Code.Build.Code
instance Code.Build.Codeable GHC.Base.String
instance Code.Build.Codeable a => Code.Build.Codeable (GHC.Base.Maybe a)
instance GHC.Show.Show a => Code.Build.Codeable a

module Code.Build.Haskell
record :: [(String, Code)] -> Code
block :: CodeList a => a -> Code
hsModule :: CodeList a => String -> a -> Code
hsType :: [String] -> String
hsDecl :: Codeable a => String -> [String] -> a -> Code
function :: String -> String -> Code
hsLet :: (CodeList a, Codeable b) => a -> b -> Code
hsArray :: CodeList a => a -> Code
hsTuple :: CodeList a => a -> Code
hsData :: String -> [String] -> Code
string :: Codeable a => a -> Code
(.=.) :: Codeable b => String -> b -> Code
infix 2 .=.

module Code.Build.JavaScript
jsObject :: [(String, Code)] -> Code
statements :: CodeList a => a -> Code
block :: CodeList a => a -> Code
jsIf :: (Codeable a, CodeList b) => a -> b -> Code
jsElse :: CodeList a => a -> Code
for :: (Codeable a, CodeList b) => a -> b -> Code
function :: CodeList a => [String] -> a -> Code
functionDecl :: CodeList a => String -> [String] -> a -> Code
call :: CodeList a => String -> a -> Code
proc :: CodeList a => String -> a -> Code
ret :: Codeable a => a -> Code
string :: Codeable a => a -> Code
new :: Codeable a => String -> a -> Code
var :: Codeable a => String -> a -> Code
(.=.) :: Codeable b => String -> b -> Code
infix 2 .=.

module Code.Build.PHP
hashmap :: [(String, Code)] -> Code
statements :: CodeList a => a -> Code
block :: CodeList a => a -> Code
phpIf :: (Codeable a, CodeList b) => a -> b -> Code
phpElse :: CodeList a => a -> Code
for :: (Codeable a, CodeList b) => a -> b -> Code
php :: CodeList a => a -> Code
phpClass :: CodeList a => String -> a -> Code
protected :: Codeable a => String -> a -> Code
function :: CodeList a => [String] -> a -> Code
functionDecl :: CodeList a => String -> [String] -> a -> Code
call :: CodeList a => String -> a -> Code
proc :: CodeList a => String -> a -> Code
ret :: Codeable a => a -> Code
string :: Codeable a => a -> Code
new :: Codeable a => String -> a -> Code
var :: Codeable a => String -> a -> Code
(.=.) :: Codeable b => String -> b -> Code
infix 2 .=.

module Code.Build.Ruby
hashmap :: [(String, Code)] -> Code
statements :: CodeList a => a -> Code
block :: CodeList a => a -> Code
endBlock :: CodeList a => a -> Code
rbIf :: (Codeable a, CodeList b) => a -> b -> Code
rbIf_ :: (Codeable a, CodeList b) => a -> b -> Code
rbElsIf :: (Codeable a, CodeList b) => a -> b -> Code
rbElsIf_ :: (Codeable a, CodeList b) => a -> b -> Code
rbElse :: CodeList b => b -> Code
rbModule :: CodeList a => String -> a -> Code
rbClass :: CodeList a => String -> a -> Code
require :: String -> Code
function :: CodeList a => String -> [String] -> a -> Code
call :: CodeList a => String -> a -> Code
ret :: Codeable a => a -> Code
string :: Codeable a => a -> Code
new :: CodeList a => String -> a -> Code
(.=.) :: Codeable b => String -> b -> Code
infix 2 .=.
