b9-0.3.1: A tool and library for building virtual machine images.

Safe HaskellNone



B9 produces not only VM-Images but also text documents such as configuration files required by virtual machines. This module is about creating and merging files containing parsable syntactic structures, such as most configuration files do.

Imagine you would want to create a cloud-init 'user-data' file from a set of 'user-data' snippets which each are valid 'user-data' files in yaml syntax and e.g. a writefiles section. Now the goal is, for b9 to be able to merge these snippets into one, such that all writefiles sections are combined into a single writefile section. Another example is OTP/Erlang sys.config files. This type class is the greatest commonon denominator of types describing a syntax that can be parsed, concatenated e.g. like in the above example and rendered. The actual concatenation operation is the append from Monoid, i.e. like monoid but without the need for an empty element.



class Semigroup a => ConcatableSyntax a where Source

Types of values that can be parsedrendered fromto ByteStrings. This class is used as basis for the ASTish class.


decodeSyntax Source


:: FilePath

An arbitrary string for error messages that corresponds to a possible input file.

-> ByteString

The raw input to parse

-> Either String a 

encodeSyntax :: a -> ByteString Source

class ConcatableSyntax a => ASTish a where Source

Types of values that describe content, that can be created from an AST.


fromAST :: (CanRender c, Applicative m, Monad m, MonadIO m, MonadReader Environment m) => AST c a -> m a Source

data AST c a Source

Describe how to create structured content that has a tree-like syntactic structure, e.g. yaml, JSON and erlang-proplists. The first parameter defines a context into which the AST is embeded, e.g. B9.Content.Generator.Content'. The second parameter defines a specifix syntax, e.g ErlangPropList that the AST value generates.


ASTObj [(String, AST c a)]

Create an object similar to a Json object.

ASTArr [AST c a]

An array.

ASTMerge [AST c a]

Merge the nested elements, this is a very powerful tool that allows to combine several inputs in a smart and safe way, e.g. by merging the values of the same fields in yaml objects.

ASTEmbed c 
ASTString String 
ASTParse SourceFile 
AST a 


(Eq c, Eq a) => Eq (AST c a) 
(Data c, Data a) => Data (AST c a) 
(Read c, Read a) => Read (AST c a) 
(Show c, Show a) => Show (AST c a) 
(Arbitrary c, Arbitrary a) => Arbitrary (AST c a) 
Typeable (* -> * -> *) AST 

class CanRender c where Source

Types of values that can be rendered into a ByteString