packages feed

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}})