Safe Haskell | None |
---|---|
Language | Haskell98 |
This library exports two utilities for compiling Dhall expressions to Bash:
dhallToExpression
, which emits a Bash expression (i.e. a valid right-hand side for an assignment)dhallToStatement
, which emits a Bashdeclare
orunset
statement suitable for use witheval
dhallToExpression
only supports the conversion of primitive values, such
as:
Bool
- which translates to a string that is either"true"
or"false"
Natural
- which translates to a Bash integerInteger
- which translates to a Bash integerText
- which translates to a Bash string (properly escaped if necessary)
The dhall-to-bash
executable by default tries to compile Dhall expressions
to Bash expressions using the dhallToExpression
function. For example:
$ dhall-to-bash <<< 'True' true $ dhall-to-bash <<< 'False' false $ dhall-to-bash <<< '1' 1 $ dhall-to-bash <<< '+1' 1 $ dhall-to-bash <<< '"ABC"' ABC $ dhall-to-bash <<< '" X "' $' X ' $ dhall-to-bash <<< 'Natural/even +100' true
The output of dhallToExpression
is a valid Bash expression that can be
embedded anywhere Bash expressions are valid, such as the right-hand side of
an assignment statement:
$ FOO=$(dhall-to-bash <<< 'List/length Natural [1, 2, 3]') $ echo "${FOO}" 3
dhallToStatement
supports a wider range of expressions by also adding
support for:
Optional
- which translates to a variable which is either set or unsetList
- which translates to a Bash array- records - which translate to Bash associative arrays
The dhall-to-bash
executable can emit a statement instead of an expression
if you add the --declare
flag specifying which variable to set or unset.
For example:
$ dhall-to-bash --declare FOO <<< 'None Natural' unset FOO $ dhall-to-bash --declare FOO <<< 'Some 1' declare -r -i FOO=1 $ dhall-to-bash --declare FOO <<< 'Some (Some 1)' declare -r -i FOO=1 $ dhall-to-bash --declare FOO <<< 'Some (None Natural)' unset FOO $ dhall-to-bash --declare FOO <<< '[1, 2, 3]' declare -r -a FOO=(1 2 3) $ dhall-to-bash --declare FOO <<< '{ bar = 1, baz = True }' declare -r -A FOO=([bar]=1 [baz]=true)
The output of dhallToExpression
is either a declare
or unset
Bash
statement that you can pass to eval
:
$ eval $(dhall-to-bash --declare FOO <<< '{ bar = 1, baz = True }') $ echo "${FOO[bar]}" 1 $ echo "${FOO[baz]}" true
dhall-to-bash
declares variables read-only (i.e. -r
) to prevent you from
accidentally overwriting, deleting or mutating variables:
$ eval $(dist/build/dhall-to-bash/dhall-to-bash --declare BAR <<< '1') $ echo "${BAR"} 1 $ unset BAR bash: unset: BAR: cannot unset: readonly variable $ eval $(dist/build/dhall-to-bash/dhall-to-bash --declare BAR <<< '2') bash: declare: BAR: readonly variable
Synopsis
- dhallToExpression :: Expr s Void -> Either ExpressionError ByteString
- dhallToStatement :: Expr s Void -> ByteString -> Either StatementError ByteString
- data ExpressionError = UnsupportedExpression (Expr Void Void)
- data StatementError
Dhall to Bash
:: Expr s Void | Dhall expression to compile |
-> Either ExpressionError ByteString | Bash expression or compile failure |
Compile a Dhall expression to a Bash expression
This only supports:
Bool
sNatural
sInteger
sText
s
:: Expr s Void | Dhall expression to compile |
-> ByteString | Variable to |
-> Either StatementError ByteString | Bash statement or compile failure |
Compile a Dhall expression to a Bash statement that declare
s or unset
s a
a variable of your choice
This only supports:
Bool
sNatural
sInteger
sText
sOptional
sList
s- records
Exceptions
data ExpressionError Source #
This is the exception type for errors that might arise when translating Dhall expressions to Bash expressions
Because the majority of Dhall language features do not easily translate to Bash this just returns the expression that failed
Instances
Show ExpressionError Source # | |
Defined in Dhall.Bash showsPrec :: Int -> ExpressionError -> ShowS # show :: ExpressionError -> String # showList :: [ExpressionError] -> ShowS # | |
Exception ExpressionError Source # | |
Defined in Dhall.Bash |
data StatementError Source #
This is the exception type for errors that might arise when translating Dhall expressions to Bash statements
Because the majority of Dhall language features do not easily translate to Bash this just returns the expression that failed
Instances
Show StatementError Source # | |
Defined in Dhall.Bash showsPrec :: Int -> StatementError -> ShowS # show :: StatementError -> String # showList :: [StatementError] -> ShowS # | |
Exception StatementError Source # | |
Defined in Dhall.Bash |