hydra-0.15.0: src/main/haskell/Hydra/Encode/Ast.hs
-- Note: this is an automatically generated file. Do not edit.
-- | Term encoders for hydra.ast
module Hydra.Encode.Ast where
import qualified Hydra.Ast as Ast
import qualified Hydra.Core as Core
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Maybes as Maybes
import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
associativity :: Ast.Associativity -> Core.Term
associativity x =
case x of
Ast.AssociativityNone -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "none"),
Core.fieldTerm = Core.TermUnit}})
Ast.AssociativityLeft -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "left"),
Core.fieldTerm = Core.TermUnit}})
Ast.AssociativityRight -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "right"),
Core.fieldTerm = Core.TermUnit}})
Ast.AssociativityBoth -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "both"),
Core.fieldTerm = Core.TermUnit}})
blockStyle :: Ast.BlockStyle -> Core.Term
blockStyle x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.BlockStyle"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "indent"),
Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map (\x2 -> Core.TermLiteral (Core.LiteralString x2)) opt)) (Ast.blockStyleIndent x))},
Core.Field {
Core.fieldName = (Core.Name "newlineBeforeContent"),
Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralBoolean x2)) (Ast.blockStyleNewlineBeforeContent x))},
Core.Field {
Core.fieldName = (Core.Name "newlineAfterContent"),
Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralBoolean x2)) (Ast.blockStyleNewlineAfterContent x))}]})
bracketExpr :: Ast.BracketExpr -> Core.Term
bracketExpr x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.BracketExpr"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "brackets"),
Core.fieldTerm = (brackets (Ast.bracketExprBrackets x))},
Core.Field {
Core.fieldName = (Core.Name "enclosed"),
Core.fieldTerm = (expr (Ast.bracketExprEnclosed x))},
Core.Field {
Core.fieldName = (Core.Name "style"),
Core.fieldTerm = (blockStyle (Ast.bracketExprStyle x))}]})
brackets :: Ast.Brackets -> Core.Term
brackets x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.Brackets"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "open"),
Core.fieldTerm = (symbol (Ast.bracketsOpen x))},
Core.Field {
Core.fieldName = (Core.Name "close"),
Core.fieldTerm = (symbol (Ast.bracketsClose x))}]})
expr :: Ast.Expr -> Core.Term
expr x =
case x of
Ast.ExprConst v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "const"),
Core.fieldTerm = (symbol v0)}})
Ast.ExprIndent v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "indent"),
Core.fieldTerm = (indentedExpression v0)}})
Ast.ExprOp v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "op"),
Core.fieldTerm = (opExpr v0)}})
Ast.ExprBrackets v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "brackets"),
Core.fieldTerm = (bracketExpr v0)}})
Ast.ExprSeq v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "seq"),
Core.fieldTerm = (seqExpr v0)}})
indentStyle :: Ast.IndentStyle -> Core.Term
indentStyle x =
case x of
Ast.IndentStyleAllLines v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.IndentStyle"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "allLines"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v0))}})
Ast.IndentStyleSubsequentLines v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.IndentStyle"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "subsequentLines"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v0))}})
indentedExpression :: Ast.IndentedExpression -> Core.Term
indentedExpression x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.IndentedExpression"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "style"),
Core.fieldTerm = (indentStyle (Ast.indentedExpressionStyle x))},
Core.Field {
Core.fieldName = (Core.Name "expr"),
Core.fieldTerm = (expr (Ast.indentedExpressionExpr x))}]})
op :: Ast.Op -> Core.Term
op x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.Op"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "symbol"),
Core.fieldTerm = (symbol (Ast.opSymbol x))},
Core.Field {
Core.fieldName = (Core.Name "padding"),
Core.fieldTerm = (padding (Ast.opPadding x))},
Core.Field {
Core.fieldName = (Core.Name "precedence"),
Core.fieldTerm = (precedence (Ast.opPrecedence x))},
Core.Field {
Core.fieldName = (Core.Name "associativity"),
Core.fieldTerm = (associativity (Ast.opAssociativity x))}]})
opExpr :: Ast.OpExpr -> Core.Term
opExpr x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.OpExpr"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "op"),
Core.fieldTerm = (op (Ast.opExprOp x))},
Core.Field {
Core.fieldName = (Core.Name "lhs"),
Core.fieldTerm = (expr (Ast.opExprLhs x))},
Core.Field {
Core.fieldName = (Core.Name "rhs"),
Core.fieldTerm = (expr (Ast.opExprRhs x))}]})
padding :: Ast.Padding -> Core.Term
padding x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.Padding"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "left"),
Core.fieldTerm = (ws (Ast.paddingLeft x))},
Core.Field {
Core.fieldName = (Core.Name "right"),
Core.fieldTerm = (ws (Ast.paddingRight x))}]})
precedence :: Ast.Precedence -> Core.Term
precedence x =
Core.TermWrap (Core.WrappedTerm {
Core.wrappedTermTypeName = (Core.Name "hydra.ast.Precedence"),
Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Ast.unPrecedence x))})
seqExpr :: Ast.SeqExpr -> Core.Term
seqExpr x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.ast.SeqExpr"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "op"),
Core.fieldTerm = (op (Ast.seqExprOp x))},
Core.Field {
Core.fieldName = (Core.Name "elements"),
Core.fieldTerm = ((\xs -> Core.TermList (Lists.map expr xs)) (Ast.seqExprElements x))}]})
symbol :: Ast.Symbol -> Core.Term
symbol x =
Core.TermWrap (Core.WrappedTerm {
Core.wrappedTermTypeName = (Core.Name "hydra.ast.Symbol"),
Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Ast.unSymbol x))})
ws :: Ast.Ws -> Core.Term
ws x =
case x of
Ast.WsNone -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "none"),
Core.fieldTerm = Core.TermUnit}})
Ast.WsSpace -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "space"),
Core.fieldTerm = Core.TermUnit}})
Ast.WsBreak -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "break"),
Core.fieldTerm = Core.TermUnit}})
Ast.WsBreakAndIndent v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "breakAndIndent"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v0))}})
Ast.WsDoubleBreak -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "doubleBreak"),
Core.fieldTerm = Core.TermUnit}})